Android 如何从系统图库中选择图片
这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如: 如何从系统图库中选择图片。
首先,让我们来看看如何将手机系统图库集成到你的App中,然后再从图库中选择图片来做一些事。例如,在Facebook的App,你就可以直接选择手机上的图片上传到你的个人资料。
让我们来做一个简单例子,要求:
- 屏幕上显示一个按钮和图片视图控件。
- 点击“载入图片”按钮,将用户重定向到Android的图片库,在那里可以选择一个图片。
- 一旦图片被选中,图片将在主屏幕上的图片视图控件中显示。
让我们开始。
步骤1:创建基本的Android项目
在Eclipse中,点击New > Project > Android Project,给项目取名为“ImageGalleryDemo”,然后选择Android2.1或sdk 7。
一旦这一步完成,你将看到一个基本的hello world程序。
步骤2:修改布局文件
在我们的例子中,我们需要一个简单的布局:一个ImageView控件来显示我们选中的图片,一个Button控件点击重定向到手机图库。
在项目中打开layout/main.xml,然后替换成下面的代码:
01 |
<? xml version = "1.0" encoding = "utf-8" ?> |
02 |
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" |
03 |
android:orientation = "vertical" |
04 |
android:layout_width = "fill_parent" |
05 |
android:layout_height = "fill_parent" > |
07 |
android:id = "@+id/imgView" |
08 |
android:layout_width = "fill_parent" |
09 |
android:layout_height = "wrap_content" |
10 |
android:layout_weight = "1" ></ ImageView > |
12 |
android:id = "@+id/buttonLoadPicture" |
13 |
android:layout_width = "wrap_content" |
14 |
android:layout_height = "wrap_content" |
15 |
android:layout_weight = "0" |
16 |
android:text = "Load Picture" |
17 |
android:layout_gravity = "center" ></ Button > |
步骤3:编写重定向到图片库的代码
现在我们需要写一些Java代码来处理按钮的点击事件,而重定向到图片库的代码如下:
2 |
Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); |
4 |
startActivityForResult(i, RESULT_LOAD_IMAGE); |
注意:这里要传一个整形的常量RESULT_LOAD_IMAGE到startActivityForResult()方法。
步骤4:获取选中的图片
一旦用户选择了一张图片,onActivityResult()方法将会被调用。我们需要处理这个方法得到的数据,代码如下:
02 |
protected void onActivityResult( int requestCode, int resultCode, Intent data) { |
03 |
super .onActivityResult(requestCode, resultCode, data); |
05 |
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { |
06 |
Uri selectedImage = data.getData(); |
07 |
String[] filePathColumn = { MediaStore.Images.Media.DATA }; |
09 |
Cursor cursor = getContentResolver().query(selectedImage, |
10 |
filePathColumn, null , null , null ); |
13 |
int columnIndex = cursor.getColumnIndex(filePathColumn[ 0 ]); |
14 |
String picturePath = cursor.getString(columnIndex); |
注意:onActivityResult()方法只有当图片被选中后才会调用。在这个方法中,我们需要检查requestCode是否是我们之前传给startActivityForResult()方法的RESULT_LOAD_IMAGE。
最终代码
ImageGalleryDemoActivity类的最终代码如下:
01 |
package net.viralpatel.android.imagegalleray; |
03 |
import android.app.Activity; |
04 |
import android.content.Intent; |
05 |
import android.database.Cursor; |
06 |
import android.graphics.BitmapFactory; |
07 |
import android.net.Uri; |
08 |
import android.os.Bundle; |
09 |
import android.provider.MediaStore; |
10 |
import android.view.View; |
11 |
import android.widget.Button; |
12 |
import android.widget.ImageView; |
14 |
public class ImageGalleryDemoActivity extends Activity { |
16 |
private static int RESULT_LOAD_IMAGE = 1 ; |
19 |
public void onCreate(Bundle savedInstanceState) { |
20 |
super .onCreate(savedInstanceState); |
21 |
setContentView(R.layout.main); |
23 |
Button buttonLoadImage = (Button) findViewById(R.id.buttonLoadPicture); |
24 |
buttonLoadImage.setOnClickListener( new View.OnClickListener() { |
27 |
public void onClick(View arg0) { |
29 |
Intent i = new Intent( |
31 |
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); |
33 |
startActivityForResult(i, RESULT_LOAD_IMAGE); |
39 |
protected void onActivityResult( int requestCode, int resultCode, Intent data) { |
40 |
super .onActivityResult(requestCode, resultCode, data); |
42 |
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { |
43 |
Uri selectedImage = data.getData(); |
44 |
String[] filePathColumn = { MediaStore.Images.Media.DATA }; |
46 |
Cursor cursor = getContentResolver().query(selectedImage, |
47 |
filePathColumn, null , null , null ); |
50 |
int columnIndex = cursor.getColumnIndex(filePathColumn[ 0 ]); |
51 |
String picturePath = cursor.getString(columnIndex); |
54 |
ImageView imageView = (ImageView) findViewById(R.id.imgView); |
55 |
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); |
程序截图
第一屏:用户将重定向到手机图库
用户从图库选择图片
在我们的App显示用户选中的图片
免费下载地址在 http://linux.bkjia.com/
用户名与密码都是www.bkjia.com
具体下载目录在 /2012年资料/5月/12日/Android 如何从系统图库中选择图片/
更多Android相关信息见Android 专题页面 http://www.bkjia.com/topicnews.aspx?tid=11
评论暂时关闭