2014年7月21日 星期一

不用ValueAnimator改用TimerTask

問題:
有一個動畫,其中需要針對一個值的改變而畫,那個值會在650ms中照時間比例從0變到1,中間的值是float,作法如下。

mAnimator = ValueAnimator.ofFloat(0, 1);
mAnimator.setDuration(650);
mAnimator.addUpdateListener(...); // 每個animation的frame更新時都會callback
mAnimator.addListener(...); // animation的開始/結束/cancel/repeat
mAnimator.start();

但後來發現這個動畫會有卡頓的問題,並沒辦法均勻地變化比例。


解法:
所以我們改用TimerTask來做動畫,解決這個問題。

private Timer mTimer = new Timer(true); private MyTimerTask mTimerTask = new MyTimerTask(); public class MyTimerTask extends TimerTask{ @Override public void run() { if(mActivity != null){ mActivity.runOnUiThread(new Runnable(){ @Override public void run() { ..... } }); } } };

接著在要進行動畫的地方呼叫:
    mTimer.scheduleAtFixedRate(mTimerTask,...);

沒有留言:

張貼留言