标签:android图片选择
最近做一个页面,反馈问题页面,有个用户上传问题图片的功能。本来很笨的想把系统的所有图片列出来,然后让用户选择,后来发现原来可以直接打开手机所有图片的api的。效果如图:
给出主要代码:
1、选择图片
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, 1);
2、获取图片
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try { if (requestCode == 1 && resultCode == RESULT_OK && null != data) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; BitmapFactory.decodeFile(picturePath, opts); opts.inSampleSize = computeSampleSize(opts, -1, 160 * 160);//转换成160*160大小图片 // 这里一定要将其设置回false,因为之前我们将其设置成了true opts.inJustDecodeBounds = false; try { Bitmap bmp = BitmapFactory.decodeFile(picturePath, opts); if (mPosition != 0)// 替换 { fba.getmImgs().set(mPosition, bmp); fba.getmImgPaths().set(mPosition, picturePath); } else { fba.getmImgs().add(bmp); fba.getmImgPaths().add(picturePath); } } catch (OutOfMemoryError err) { if (err != null) { err.printStackTrace(); } } fba.notifyDataSetChanged(); } } catch (Exception e) { if (e != null) { e.printStackTrace(); } } catch (OutOfMemoryError e) { if (e != null) { e.printStackTrace(); } } }
public int computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) { int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels); int roundedSize; if (initialSize <= 8) { roundedSize = 1; while (roundedSize < initialSize) { roundedSize <<= 1; } } else { roundedSize = (initialSize + 7) / 8 * 8; } return roundedSize; } private int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) { double w = options.outWidth; double h = options.outHeight; int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels)); int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(Math.floor(w / minSideLength), Math.floor(h / minSideLength)); if (upperBound < lowerBound) { return lowerBound; } if ((maxNumOfPixels == -1) && (minSideLength == -1)) { return 1; } else if (minSideLength == -1) { return lowerBound; } else { return upperBound; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:android图片选择
原文地址:http://blog.csdn.net/figo0423/article/details/46883015