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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM