【Android_View】ImageView源码简析笔记(四)

ImageView源码简析


前面几篇文章我们重点看了ImageView的构造器与”三步论”。这次,我们在一起看看ImageView中的其它方法吧。
除了三步论,好戏还有很多呀。


因为在【Android_View】ImageView源码简析笔记(一)中我们曾经一起阅读过部分其它方法的源码,以此为开始。那么这里我们必然是从Step 2开始了。


其它方法简析(2)

1.1 ImageView中的Drawable

1.1.1 获取Drawable资源

很明显,这个方法返回的mDrawable是我们整个ImageView操作的基础。

 public Drawable getDrawable() {
        if (mDrawable == mRecycleableBitmapDrawable) {
            // 如果考虑到缓存,我们需要将当前的引用清空
            mRecycleableBitmapDrawable = null;
        }
        return mDrawable;
    }

对于这个可被回收的位图资源–【mRecycleableBitmapDrawable】

private BitmapDrawable mRecycleableBitmapDrawable = null;

可以看到,这是ImageView中的成员变量。为BitmapDrawable类型,而

public class BitmapDrawable extends Drawable {…}

所以可以很清楚看到它的类型关系。
浏览整个ImageView代码,可以发现mRecycleableBitmapDrawable一共有1处有效赋值的地方:
* 1、首先是在setImageBitmap()中:

public void setImageBitmap(Bitmap bm) {
        mDrawable = null;
        if (mRecycleableBitmapDrawable == null) {
        //【新建Bitmap并赋值给mRecycleableBitmapDrawable】
            mRecycleableBitmapDrawable = new BitmapDrawable(mContext.getResources(), bm);
        } else {
            mRecycleableBitmapDrawable.setBitmap(bm);
        }
        setImageDrawable(mRecycleableBitmapDrawable);
    }

这个方法的作用是设置一个Bitmap作为ImageView的显示内容。

Bitmap实际上就是我们常说的【位图】。(ps:与之相对,android L(5.0)之后,带引入了VectorDrawable即【矢量图】的支持)

来看setImageDrawable()方法:

public void setImageDrawable(@Nullable Drawable drawable) {
        if (mDrawable != drawable) {
            mResource = 0;
            mUri = null;

            final int oldWidth = mDrawableWidth;
            final int oldHeight = mDrawableHeight;
            //对ImageView的mDrawable变量进行赋值,并设置初始的宽高及其他属性
            updateDrawable(drawable);

            if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值