zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java基础循环、条件语句、switch case
    java基础抽象类、接口、枚举、包
    java基础基本数据类型、变量类型、修饰符、运算符
    Mac权限问题,operation not permitted
    【比赛游记】NOIP2021 游记
    【比赛题解】NOIP2021 题解
    把LeetCode上的Sql题刷完了会有什么收获
    分析函数之Lead()、Lag()
    QT相关(c++)
    grpc
  • 原文地址:https://www.cnblogs.com/anee/p/3999864.html
Copyright © 2011-2022 走看看