您的位置:首页 > 其它

优化ImageView,在使用ListView或GridView的时候,每次更新图片的时候,在显示新的图片和旧的图片一样大小的时候,不需要去重新计算大小

2013-05-22 12:07 691 查看
OptimisedImageView.java外部引用原始文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50


import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.util.AttributeSet;
import android.widget.ImageView;

public class OptimisedImageView extends ImageView {

private boolean mIgnoreNextRequestLayout = false;

public OptimisedImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public void setImageDrawable(final Drawable newDrawable) {
if (VERSION.SDK_INT < VERSION_CODES.ICE_CREAM_SANDWICH) {

// The currently set Drawable
final Drawable oldDrawable = getDrawable();

if (null != oldDrawable && oldDrawable != newDrawable) {
final int oldWidth = oldDrawable.getIntrinsicWidth();
final int oldHeight = oldDrawable.getIntrinsicHeight();

/**
* Ignore the next requestLayout call if the new Drawable is the
* same size as the currently displayed one.
* */
mIgnoreNextRequestLayout = oldHeight == newDrawable.getIntrinsicHeight()
&& oldWidth == newDrawable.getIntrinsicWidth();
}
}

// Finally, call up to super
super.setImageDrawable(newDrawable);
}

@Override
public void requestLayout() {
if (!mIgnoreNextRequestLayout) {
super.requestLayout();
}

// Reset Flag so that the requestLayout() will work again
mIgnoreNextRequestLayout = false;
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐