ImageView源码解析
前面看完了与Drawable有关的方法之后,今天我们再继续。
其它方法解析3
1. 有关ImageView的显示资源的异步设定
提到异步,先来看一个内部类ImageDrawableCallback:
private class ImageDrawableCallback implements Runnable {
private final Drawable drawable;
private final Uri uri;
private final int resource;
ImageDrawableCallback(Drawable drawable, Uri uri, int resource) {
this.drawable = drawable;
this.uri = uri;
this.resource = resource;
}
@Override
public void run() {
setImageDrawable(drawable);
mUri = uri;
mResource = resource;
}
}
可以看到,这是一个实现了Runnable接口的类,意味着这其中的部分操作会在一个新的线程中进行。我们看,run()方法中,主要有3个操作:
- 首先是将传入的Drawable设定为当前ImageView的显示内容。
- 接着是设置。
- 最后一步则是设置资源ID。
当然,构造方法中的操作也是一样的。
很明显,这个类与当前ImageView的显示资源设置有关。
仅仅知道定义可能并没有什么,再来看这个类在哪里起作用:
可以看到,ImageView中一共有三处调用,分别来看:
1.1 异步设置Icon图标
public Runnable setImageIconAsync(@Nullable Icon icon) {
return new ImageDrawableCallback(icon == null ? null : icon.loadDrawable(mContext), null, 0);
}
其中,loadDrawable()是Icon类中的一个方法。作用和方法名称一样,就是加载Drawable,并初步设置其颜色渲染相关的值与渲染模式等。
public Drawable loadDrawable(Context context) {
final Drawab