书童 Android 如何从系统图库中选择图片"/>
迷途d书童 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 = "" |
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.p_w_picpathgalleray; |
03 | import android.app.Activity; |
04 | import android.content.Intent; |
05 | import android.database.Cursor; |
06 | import android.graphics.BitmapFactory; |
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 p_w_picpathView = (ImageView) findViewById(R.id.imgView); |
55 | p_w_picpathView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); |
程序截图
第一屏:用户将重定向到手机图库
用户从图库选择图片
在我们的App显示用户选中的图片
源代码:ImageGalleryDemo.zip (46 KB)
转载于:
发布评论