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

  • 相关阅读:
    linux下利用valgrind工具进行内存泄露检测和性能分析
    Linux下内存泄漏工具
    linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np
    Linux下getopt()函数
    SparkStreaming+Kafka整合
    Hive+Sqoop+Mysql整合
    crontab
    Hive与Hbase整合
    关系数据库数据与hadoop数据进行转换的工具
    Flume+Kafka+Storm+Hbase+HDSF+Poi整合
  • 原文地址:https://www.cnblogs.com/anee/p/3999864.html
Copyright © 2011-2022 走看看