ImageView 有 4 个 API 来指定图像。
- setImageDrawable(Drawable drawable)
- setImageBitmap(位图 bm)
- setImageResource(int resId)
- setImageURI(URI uri)
这里的setImageDrawable 是其他API 所依赖的原始函数。其他 3 个只是帮助您编写更少代码的方法。
setImageURI、setImageBitmap 都在 UI 线程上运行。我想说setImageBitmap 比第一个快一点。 setImageURI 真的取决于 Uri 资源的来源(例如,uri 可能指向一个甚至没有存储在手机上的远程文件)。
setImageURI() 不适合在 UI 线程上用作读取和解码,这可能会导致延迟打嗝。
最好使用以下内容:-
改为setImageDrawable(android.graphics.drawable.Drawable) 或setImageBitmap(android.graphics.Bitmap) 和BitmapFactory。
您也可以从uri 返回bitmap 并在imageview 中使用它
Uri imageUri = intent.getData();
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri);
Imageview my_img_view = (Imageview ) findViewById (R.id.my_img_view);
my_img_view.setImageBitmap(bitmap);
有时在图像视图上加载大位图可能会导致内存不足异常..所以你应该有效地加载位图..
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}
mImageView.setImageBitmap(
decodeSampledBitmapFromResource(getResources(), R.id.myimage, 100, 100));
也可以查看这些链接..更好地理解
Strange out of memory issue while loading an image to a Bitmap object
Android 开发者文档:https://developer.android.com/training/displaying-bitmaps/load-bitmap.html