//侦动画控制,只播一次
public void MyFrameAnimation(final AnimationDrawable animaition) {
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
//获取最后一帧,和当前帧做比较,如果相等,就结束动画,调用动画结束回调
if (animaition.getCurrent() == animaition.getFrame(animaition.getNumberOfFrames() - 1)) {
animaition.stop();
handler.removeCallbacks(runnable);
}else{
initHandler(animaition);
}
}
};
initHandler(animaition);
}
private int maxDuration;
private void initHandler(AnimationDrawable animaition) {
handler.postDelayed(runnable, maxDuration == 0 ? getMaxDuration(animaition) : maxDuration);
}
/**
* 获取持续时间最长的帧的持续时间
*
* @return 时间 如果这一帧大于1秒,则返回 1 秒,否则返回这一帧的持续时间
*/
private int getMaxDuration(AnimationDrawable animaition) {
for (int i = 0; i < animaition.getNumberOfFrames(); i++) {
if (maxDuration < animaition.getDuration(i)) {
maxDuration = animaition.getDuration(i);
}
}
return Math.min(maxDuration, 1000);
}
//重置动画
private void restTab(AnimationDrawable animaition){
if(animaition!=null){
animaition.start();
animaition.selectDrawable(0);
animaition.stop();
}
}
网友评论