android 屬性動畫 vs 延時實現動畫
阿新 • • 發佈:2019-01-27
屬性動畫
我們用屬性動畫實現動畫常用的程式碼:
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,寫了幾篇文章後,我自己確實要明白了不少~