ImageView setImageURI图片不改变\NetWorkImageView 不显示的问题

ImageView

问题描述:图片文件已改变,第二次调用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 }

NetWorkImageView

//Copy the code from Volley's NetworkImageView and change onLayout as below.

@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    super.onLayout(changed, left, top, right, bottom);
    if (!TextUtils.isEmpty(mUrl)) {
        loadImageIfNecessary(true);
    }else{
        if (mImageContainer != null) {
            mImageContainer.cancelRequest();
            mImageContainer = null;
        }
    }
}

//Change the other ImageView image setters, for example...
@Override
public void setImageDrawable(Drawable drawable) {
    mUrl = null;
    super.setImageDrawable(drawable);
}

@Override
public void setImageURI(Uri uri) {
    mUrl = null;
    super.setImageURI(uri);
}    

 

Reference:http://kalkanotel.com/networkimageview-set-image-from-file-i225690.htm

转载于:https://www.cnblogs.com/anee/p/3999864.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值