@flyouting
2014-03-19T15:24:28.000000Z
字数 1615
阅读 3294
这是基于Android Studio及Fragment的相机开发的第三章,如果你还没准备好,先去github上拉一下我的一个示例工程。本章主要包含“SimpleAndroidImagePickerFragment.”
这篇是这个指南中比较短的一篇,其实对于从相册中取出一张图片来显示实在是没什么难的。
使用 Intent.ACTION_PICK你可以通过android的 content provider 获取各类多媒体文件。在本例中,我们将使用ACTION_PICK执行一个基本操作:打开Android图片库,选择一个图像,显示在ImageView上。相关代码在示例工程中有。
打开SimpleAndroidPickerFragment 文件,你可以看到:
@Override
public void onClick(View view) {
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, IMAGE_PICKER_SELECT);
}
/**
* Photo Selection result
*/
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == IMAGE_PICKER_SELECT && resultCode == Activity.RESULT_OK) {
MainActivity activity = (MainActivity) getActivity();
Bitmap bitmap = getBitmapFromCameraData(data, activity);
mSelectedImage.setImageBitmap(bitmap);
}
}
从上边代码可以看到,当Fragment中的按钮被触发,一个Intent就会被分发去从EXTERNAL_CONTENT_URI 中获取一类媒体。当Activity result返回时,我们就可以保存并显示bitmap在我们的ImageView上。
这有部分保存bitmap的逻辑:
/**
* Use for decoding camera response data. *
*
* @param data
* @param context
* @return
*/
public static Bitmap getBitmapFromCameraData(Intent data, Context context) {
Uri selectedImage = data.getData();
String[] filePathColumn = {
MediaStore.Images.Media.DATA
};
Cursor cursor = context.getContentResolver().query(selectedImage, filePathColumn, null,
null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
return BitmapFactory.decodeFile(picturePath);
}
这里有点小逻辑需要注意一下,基本上我所做的是使用cursor,调用cursor.moveToFirst() 来查询‘last selected image’,这种方法会自动获取我们从相册中选取的图片。然后通过BitmapFactory进行转码。
翻译:@flyouting
时间:2014/03/19
源地址