ImageView setImageURI图片不改变的问题

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

ImageView setImageURI图片不改变的问题的相关文章

ImageView设置点击效果没有用?ImageView src的图片大小改变不了?

ImageView设置点击效果没有用? 解决 1.ImageView xml里面必须clickable 和longClickable为true <ImageView android:layout_width="@dimen/x90" android:layout_height="@dimen/x90" android:padding="@dimen/x26" android:layout_gravity="right|center

UI组件之ImageView及其子类(一)ImageView显示图片

ImageView家族的继承关系如图: ImageView继承自View组件,它的主要功能室显示图片,还可以显示Drawable对象. ImageView直接子类是ImageButton,QuickContactBadge,间接子类是ZoomButton,因此ImageView 的所有XML属性,方法,基本上都可以用于ImageButton,ZoomButton ImageView的XML 属性如下: android:adjustViewBounds:是否调整自己的边界来保持所显示的图片长宽比.

02-常见控件:ImageView(图片视图)、slider(滑动器)、switch(开关)使用

效果图:       通过点击设置 将显示如第二张图所示                            第三张为项目目录文件 供参考              主要代码: // // WHBLAPViewController.h // 04-whblap查看器 // // Created by whblap on 14-6-6. // Copyright (c) 2014年 whblap. All rights reserved. // #import <UIKit/UIKit.h>

android脚步---简单图片浏览器改变图像透明度

图片浏览器调用ImageView的setAlpha方法来实现改变图片透明度. main.xml文件如下:三个按钮,两个imageview,,界面定义了两个ImageView,一个是显示局部图片的ImageView,android:scaleType="fitCenter表明图片会保持横纵比缩放,并将缩放后图片放在该imageview中央. <?xml version="1.0" encoding="utf-8"?> <LinearLayo

Android学习笔记:如何设置ImageView中图片的显示方式

我们在用ImageView显示图片时,很多情况下图片的大小与ImageView的尺寸不是完全一样的.这时就涉及到该如何设置显示图片了. ImageView有个重要的属性是ScaleType,该属性用以表示显示图片的方式,共有很多种取值.另外也可以在xml文件中设置ImageView的android:scaleType属性达到调整效果. 这里我们介绍各种设置的含义: 1.ScaleType.CENTER(对应xml文件中为android:scaleType="center") 图片将位于

Android -- ImageView(控制图片的大小以及旋转的角度)

1.  2.   实现代码 package com.example.myimageview3; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.util.DisplayMetrics

鼠标放到图片上替换图片,改变样式。

鼠标放到图片上替换图片,改变样式. 方法一:用 onmouseover和 onmouseout 实现 <asp:Imgbutton runat="server" src="drop.gif" onmouseover="this.src='drop.gif'" onmouseout="this.src='tabs2_2.gif'" /> 方法二:用 css 自带的样式去实现. CSS样式 /*大按钮*/ .btn_b

加载ImageView的图片

最近遇到了一个问题,当写一个自定义属性控件的时候,设置的属性传入的图片可以改变. 自定义属性的方法:http://blog.csdn.net/forwardyzk/article/details/25079743 开始的思路是:自定义的属性为integer类型,那么调用处写如对应图片在res下的id,但是当clean的时候,这个id有可能会改变,所以不能传入id. 所以现在更改为:在设置的自定义属性的地方传入res下对应图片的名字,那么再加载此图片,但是遇到了问题,没有方法直接通过名字来获取对应

js实现图片拖动改变顺序

在web页面中,需要改变多个元素的位置,可以通过元素拖动来实现.HTML5中加入了一个全局属性draggable,通过设置true/false来控制元素是否可拖动. 下面以图片拖动为例,用jQuery来实现:页面上有多个图片,把一个图片拖动到其他两个图片中间,就可以将这个图片的位置插入到两图之间. <!DOCTYPE html> <html> <head> <style> .img-div img { width:200px; height:200px; f