@flyouting
        
        2014-03-19T07:24:28.000000Z
        字数 1615
        阅读 3609
    这是基于Android Studio及Fragment的相机开发的第三章,如果你还没准备好,先去github上拉一下我的一个示例工程。本章主要包含“SimpleAndroidImagePickerFragment.”
这篇是这个指南中比较短的一篇,其实对于从相册中取出一张图片来显示实在是没什么难的。
使用 Intent.ACTION_PICK你可以通过android的 content provider 获取各类多媒体文件。在本例中,我们将使用ACTION_PICK执行一个基本操作:打开Android图片库,选择一个图像,显示在ImageView上。相关代码在示例工程中有。
打开SimpleAndroidPickerFragment 文件,你可以看到:
@Overridepublic 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 
源地址