[关闭]
@flyouting 2014-03-19T07:24:28.000000Z 字数 1615 阅读 3107

Android相机开发指南(三)

这是基于Android Studio及Fragment的相机开发的第三章,如果你还没准备好,先去github上拉一下我的一个示例工程。本章主要包含“SimpleAndroidImagePickerFragment.

这篇是这个指南中比较短的一篇,其实对于从相册中取出一张图片来显示实在是没什么难的。

使用 Intent.ACTION_PICK你可以通过android的 content provider 获取各类多媒体文件。在本例中,我们将使用ACTION_PICK执行一个基本操作:打开Android图片库,选择一个图像,显示在ImageView上。相关代码在示例工程中有。

打开SimpleAndroidPickerFragment 文件,你可以看到:

  1. @Override
  2. public void onClick(View view) {
  3. Intent i = new Intent(Intent.ACTION_PICK,
  4. android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  5. startActivityForResult(i, IMAGE_PICKER_SELECT);
  6. }
  7. /**
  8. * Photo Selection result
  9. */
  10. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  11. if (requestCode == IMAGE_PICKER_SELECT && resultCode == Activity.RESULT_OK) {
  12. MainActivity activity = (MainActivity) getActivity();
  13. Bitmap bitmap = getBitmapFromCameraData(data, activity);
  14. mSelectedImage.setImageBitmap(bitmap);
  15. }
  16. }

从上边代码可以看到,当Fragment中的按钮被触发,一个Intent就会被分发去从EXTERNAL_CONTENT_URI 中获取一类媒体。当Activity result返回时,我们就可以保存并显示bitmap在我们的ImageView上。

这有部分保存bitmap的逻辑:

  1. /**
  2. * Use for decoding camera response data. *
  3. *
  4. * @param data
  5. * @param context
  6. * @return
  7. */
  8. public static Bitmap getBitmapFromCameraData(Intent data, Context context) {
  9. Uri selectedImage = data.getData();
  10. String[] filePathColumn = {
  11. MediaStore.Images.Media.DATA
  12. };
  13. Cursor cursor = context.getContentResolver().query(selectedImage, filePathColumn, null,
  14. null, null);
  15. cursor.moveToFirst();
  16. int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
  17. String picturePath = cursor.getString(columnIndex);
  18. cursor.close();
  19. return BitmapFactory.decodeFile(picturePath);
  20. }

这里有点小逻辑需要注意一下,基本上我所做的是使用cursor,调用cursor.moveToFirst() 来查询‘last selected image’,这种方法会自动获取我们从相册中选取的图片。然后通过BitmapFactory进行转码。

翻译:@flyouting
时间:2014/03/19
源地址

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注