最近在做帧动画,由于AnimationDrawable其实就是个Drawable,本身并没有监听,研究了很多方法,网上的方法都是通过启动一个Handler,延时停止动画,这种方法虽然能实现,但是有个很大的问题,就是假如机器卡顿,那么动画就和Handler不同步了,动画持续时间越长,这个问题就越严重,于是各种查找方法,最后在API中发现了一行没有注释的代码,对,就是没有注释,结果就让我忽略的方法
getCurrent() 获取当前帧,得到的是一个 Drawable
然后想到能够获取指定帧的 Drawable,那么我们直接拿到最后一帧的 Drawable和当前帧做比较不就行了?就是如此
getFrame(int i) 获取指定帧的 Drawable
getNumberOfFrames() 获取总帧数
最终组合成核心代码
getFrame(getNumberOfFrames() -1) != getCurrent()
最后自定义个接口来实现监听就搞定啦
/**
* 作 者:MrYan (QQ:416643088)
* 创建日期:8/6 0006.
* 带回调的帧动画
*/
public class MyFrameAnimation extends AnimationDrawable {
private Handler handler;
private Runnable runnable;
private OnFrameAnimationListener onFrameAnimationListe