Android UI:Drawable:更新操作的源码分析

Drawable.Callback

接口,定义更新相关方法invalidateDrawable、scheduleDrawable、unscheduleDrawable

Drawable

封装一个Callback对象并提供设置方法setCallback

定义并实现更新相关方法

invalidateSelf方法

更新
调用传入的Callable的invalidateDrawable方法

scheduleSelf方法

延时更新
调用传入的Callable的scheduleDrawable方法

unscheduleSelf方法

取消延时更新
调用传入的Callable的unscheduleDrawable方法

View/ImageView

View实现Drawable.Callback

实现scheduleDrawable方法

利用AttachInfo.mHandler或 Choreographer.mHandler在UI线程中延时执行传入的Runnable

实现unscheduleDrawable方法

利用AttachInfo.mHandler或 Choreographer.mHandler在UI线程中取消执行Runnable

实现invalidateDrawable方法

调用invalidate方法

View.setBackground和ImageView.setImageDrawable

调用Drawable.setCallback,将View或ImageView作为Drawable.Callback传入Drawable

总结

方法实现

调用Drawable的invalidateSelf方法,实际上是调用View的invalidate方法

调用Drawable的scheduleSelf/unscheduleSelf方法,实际上是在UI线程中延时执行或取消执行传入的Runnable

设计模式:Drawable和View

Drawable.Callback,定义更新相关方法

Drawable,持有Drawable.Callback对象并利用其实现更新相关方法

View,实现Drawable.Callback,并在设置Drawable时,将自身作为Drawable.Callback传入Drawable

实现Drawable调用View中的代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值