xUtils源码阅读(6)-AsyncDrawable
来源:互联网 发布:c语言程序被隐藏 编辑:程序博客网 时间:2024/06/13 21:40
AsyncDrawable,异步图片。
源码:
/** * Author: wyouflf * Date: 13-11-17 * Time: 上午11:42 */public final class AsyncDrawable extends Drawable { private final WeakReference<ImageLoader> imageLoaderReference; private Drawable baseDrawable;//对原图片的包装 public AsyncDrawable(ImageLoader imageLoader, Drawable drawable) { if (imageLoader == null) { throw new IllegalArgumentException("imageLoader may not be null"); } baseDrawable = drawable; while (baseDrawable instanceof AsyncDrawable) { baseDrawable = ((AsyncDrawable) baseDrawable).baseDrawable; } imageLoaderReference = new WeakReference<ImageLoader>(imageLoader); } public ImageLoader getImageLoader() { return imageLoaderReference.get(); } public void setBaseDrawable(Drawable baseDrawable) { this.baseDrawable = baseDrawable; } public Drawable getBaseDrawable() { return baseDrawable; } //以下几个函数作为对Drawable的包装,要调用被包装对象的方法实现 @Override public void draw(Canvas canvas) { if (baseDrawable != null) { baseDrawable.draw(canvas); } } @Override public void setAlpha(int i) { if (baseDrawable != null) { baseDrawable.setAlpha(i); } } @Override public void setColorFilter(ColorFilter colorFilter) { if (baseDrawable != null) { baseDrawable.setColorFilter(colorFilter); } } @Override public int getOpacity() { return baseDrawable == null ? PixelFormat.TRANSLUCENT : baseDrawable.getOpacity(); } @Override public void setBounds(int left, int top, int right, int bottom) { if (baseDrawable != null) { baseDrawable.setBounds(left, top, right, bottom); } } @Override public void setBounds(Rect bounds) { if (baseDrawable != null) { baseDrawable.setBounds(bounds); } } @Override public void setChangingConfigurations(int configs) { if (baseDrawable != null) { baseDrawable.setChangingConfigurations(configs); } } @Override public int getChangingConfigurations() { return baseDrawable == null ? 0 : baseDrawable.getChangingConfigurations(); } @Override public void setDither(boolean dither) { if (baseDrawable != null) { baseDrawable.setDither(dither); } } @Override public void setFilterBitmap(boolean filter) { if (baseDrawable != null) { baseDrawable.setFilterBitmap(filter); } } @Override public void invalidateSelf() { if (baseDrawable != null) { baseDrawable.invalidateSelf(); } } @Override public void scheduleSelf(Runnable what, long when) { if (baseDrawable != null) { baseDrawable.scheduleSelf(what, when); } } @Override public void unscheduleSelf(Runnable what) { if (baseDrawable != null) { baseDrawable.unscheduleSelf(what); } } @Override public void setColorFilter(int color, PorterDuff.Mode mode) { if (baseDrawable != null) { baseDrawable.setColorFilter(color, mode); } } @Override public void clearColorFilter() { if (baseDrawable != null) { baseDrawable.clearColorFilter(); } } @Override public boolean isStateful() { return baseDrawable != null && baseDrawable.isStateful(); } @Override public boolean setState(int[] stateSet) { return baseDrawable != null && baseDrawable.setState(stateSet); } @Override public int[] getState() { return baseDrawable == null ? null : baseDrawable.getState(); } @Override public Drawable getCurrent() { return baseDrawable == null ? null : baseDrawable.getCurrent(); } @Override public boolean setVisible(boolean visible, boolean restart) { return baseDrawable != null && baseDrawable.setVisible(visible, restart); } @Override public Region getTransparentRegion() { return baseDrawable == null ? null : baseDrawable.getTransparentRegion(); } @Override public int getIntrinsicWidth() { return baseDrawable == null ? 0 : baseDrawable.getIntrinsicWidth(); } @Override public int getIntrinsicHeight() { return baseDrawable == null ? 0 : baseDrawable.getIntrinsicHeight(); } @Override public int getMinimumWidth() { return baseDrawable == null ? 0 : baseDrawable.getMinimumWidth(); } @Override public int getMinimumHeight() { return baseDrawable == null ? 0 : baseDrawable.getMinimumHeight(); } @Override public boolean getPadding(Rect padding) { return baseDrawable != null && baseDrawable.getPadding(padding); } @Override public Drawable mutate() { return baseDrawable == null ? null : baseDrawable.mutate(); } @Override public ConstantState getConstantState() { return baseDrawable == null ? null : baseDrawable.getConstantState(); } @Override protected void finalize() throws Throwable {//因为是异步,所以还要停止对应的loader super.finalize(); ImageLoader imageLoader = this.getImageLoader(); if (imageLoader != null) { imageLoader.cancel(); } }}
0 0
- xUtils源码阅读(6)-AsyncDrawable
- xUtils源码阅读(1)- x
- xUtils源码阅读(3)-ImageManagerImpl
- xUtils源码阅读(4)-MemCacheKey
- xUtils源码阅读(5)-ReuseableBitmapDrawable
- xUtils源码阅读(7)-GitDrawable
- xUtils源码阅读(8)-ImageDecoder
- xUtils源码阅读(2)-ImageManager
- XUtils源码分析之HttpUtils(一)
- xUtils 源码解析
- xUtils 源码解析
- xUtils 源码解析
- xUtils 源码解析
- xUtils 源码解析
- XUtils 源码解析
- xUtils 源码解析
- Eclipse 导入 xUtils 源码
- xUtils 源码解析
- meta标签作用?常用的http-equiv属性及其作用
- 寻路算法A*, JPS(跳点搜索)的一些杂谈
- 底牌项目中的上传牌谱功能之将视图生成图片
- java8增强的工具类:Arrays
- 分页处理,使用ajax局部刷新列表
- xUtils源码阅读(6)-AsyncDrawable
- Android 编程下 Touch 事件的分发和消费机制
- OpenMP和Pthread比较
- 玩转【斗鱼直播APP】系列之利用青花瓷抓取数据
- 当时明月在,曾照彩云归
- 从计算机视觉角度深入解读了AR
- 仿知乎日报第十篇:从网络加载首页数据,为首页设置数据
- serialVersionUID的作用和生成方式
- ZooKeeper系列之二:ZooKeeper数据模型、命名空间以及节点的概念