美文网首页
ImageView.setImageResource的坑

ImageView.setImageResource的坑

作者: 2ece9f02c806 | 来源:发表于2016-08-30 09:14 被阅读598次

有时候我们会需要在一个ImageView中根据状态不同设置为不同的图片,如图:


Paste_Image.png Paste_Image.png

这个时候通常会用setImageResource来换图片,但是这里有一个坑,就是当你设置的两张图片的大小不一样的时候,View会重新layout,看源码

    public void setImageResource(@DrawableRes int resId) {
        // The resource configuration may have changed, so we should always
        // try to load the resource even if the resId hasn't changed.
        final int oldWidth = mDrawableWidth;
        final int oldHeight = mDrawableHeight;

        updateDrawable(null);
        mResource = resId;
        mUri = null;

        resolveUri();

        if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
            requestLayout();
        }
        invalidate();
    }

当新的图片与原来的图片大小不一样的话就会调用requestLayout()来重新布局。

一般情况下这个影响不大,但是,当你这个ImageView在ListView的item中的时候就会导致ListView重新调用getView,这就可能导致item中某些状态回到默认。

我遇到的问题是:在ListView的item中有一个EditText,一个ImageView,ImageView的逻辑是,当输入框有内容则图片显示为删除的X图片。

当我在EditText中输入时,调起软键盘,默认是中文输入,当我切换到数字键盘输第一个数字,立马回到中文输入,想连着输入数字就要再切换一下数字输入。

原因就是当我输入一个数字后,ImageView调用setImageResource将图片换成X,而这个X图与之前的图片大小不一样,于是requestLayout(),然后软键盘重新回到默认的中文输入页面。坑吧!

所以遇到这种情况就把两张图做到一样大吧!!

相关文章

网友评论

      本文标题:ImageView.setImageResource的坑

      本文链接:https://www.haomeiwen.com/subject/iyefettx.html