问题描述:图片文件已改变,第二次调用ImageView.setImageURI时无法更新图片
分析:setImageURI方法中对uri进行了缓存,由于第一次加载过了该uri的资源,即使该文件内容改变了,判断中仍然会使用之前加载的。
1 public void setImageURI(Uri uri) { 2 if (mResource != 0 || 3 (mUri != uri && 4 (uri == null || mUri == null || !uri.equals(mUri)))) { 5 updateDrawable(null); 6 mResource = 0; 7 mUri = uri; 8 9 final int oldWidth = mDrawableWidth; 10 final int oldHeight = mDrawableHeight; 11 12 resolveUri(); 13 14 if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) { 15 requestLayout(); 16 } 17 invalidate(); 18 } 19 }
解决办法:
1、使用不同的文件名(不同的URI)
2、使用setImageBitmap的方式代替
1 Bitmap bmp; 2 try { 3 bmp = MediaStore.Images.Media.getBitmap(context.getContentResolver(), Uri.fromFile(file)); 4 iv.setImageBitmap(bmp); 5 } catch (FileNotFoundException e) { 6 } catch (IOException e) { 7 }
时间: 2024-10-11 14:21:52