1. 程式人生 > >android 屬性動畫 vs 延時實現動畫

android 屬性動畫 vs 延時實現動畫

屬性動畫

我們用屬性動畫實現動畫常用的程式碼:

ObjectAnimator.ofFloat(targetView,"translateX",0,100)
              .setDuration(1000).start();

屬性動畫一般只能實現一些比較簡單的動畫,使用View的scrollTo卻能實現複雜動畫,下面結合屬性動畫和scrollTo實現動畫:

final int startX = 0;
final int deltaX = 100;
ValueAnimator animator = ValueAnimator.ofInt(0,1)
                              .setDuration(100
); animator.addUpdateListener(new AnimatorUpdateListener(){ public void updateAnimation(ValueAnimator animator) { float fraction = animator.getAnimatorFraction(); tartView.scrollTo((startX + (int)(fraction*deltaX)),0); } });

通過獲取fraction從0到1的漸變過程,從而實現scrollTo的彈性滑動,以便通過屬性動畫實現一些複雜動畫。

延時實現動畫

延時實現動畫有三種方式:
1. handler;
2. view本身的postDelay;
3. 子執行緒sleep.
現在只介紹第一種~
程式碼如下:

private int count = 0;
private static final int FRACTION = 100;
private static final int DELAY_TIME = 50;
private static final int ANIMATION_ING = 1;
Handler mHandler = new Handler(){
    public void handleMessage
(Message msg){ switch(msg.what){ case ANIMATION_ING: count++; if(count <= FRACTION){ float fraction = count/(float)FRACTION; int scrollX = (int)fraction*100; tartView.scrollTo(scrollX,0); mHanlder.sendEmptyMessageDelayed(ANIMATION_ING,DELAY_TIME); } break; } } };

上面兩種實現動畫的方式,最終目的都是為了更好的理解View本身的方法scrollTo和scrollBy,寫了幾篇文章後,我自己確實要明白了不少~