關於Android動畫的一些整理
阿新 • • 發佈:2018-12-25
動畫有屬性動畫、逐幀動畫、補間動畫,在低版本(3.0之前)中沒有屬性動畫,需要藉助一個開源庫,名字好像是叫nineoldandroids,大家自己去查檢視,下面就來逐一介紹著幾種動畫
可參考:android 動畫分類
逐幀動畫
具體的用法這裡不做介紹,上面的參考文章中有,這裡還要在講的是文中提到的使用Frame Animation要注意的問題,我這裡做了測試之後發現好像,在oncreate中start也沒有問題,直接在xml中設定動畫也沒有問題
補間動畫
就我自己試驗下來,感覺補間動畫對於一次性不重複的動畫操作支援的比較好,而對於重複的效果不太好實現,比如一張圖片,勻速旋轉(模擬進度條的效果)怎麼也實現不了勻速的效果,所以如何使用大家自行斟酌。
用法這裡不做過多介紹。主要就是寫xml檔案,然後AnimationUtils.loadAnimation(),最後呼叫一下startAnimation()。
類似如下程式碼:
ImageView image =(ImageView) findViewById(R.id.image);
Animation hyperspaceJump =AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
屬性動畫
屬性動畫是這三種動畫中最好用的,和其他兩種一樣可以使用xml定義。使用xml時。
AnimatorSet set=(AnimatorSet)AnimatorInflater.loadAnimator (myContext,
R.anim.property_animator);
set.setTarget(myObject);
set.start();
直接在程式碼中時:
ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.setDuration(300);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float currentValue = (float) animation.getAnimatedValue();
Log.d("TAG", "cuurent value is " + currentValue);
}
});
anim.start();
ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
animator.setDuration(5000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float currentValue = (float) animation.getAnimatedValue();
Log.d("TAG", "cuurent value is " + currentValue);
}
});
animator.start();
在log中可以看到值得變化。上面看到了基本的用法,還有一些插值之類的,這裡就不擴充套件了,也就是怎麼去改變值的問題,只是一個函式公式。
最後
這裡還要介紹一種實現動畫的寫法:擴充套件Animation類,重寫applyTransformation方法
@Override
private Animation mAnimation = new Animation(){
public void applyTransformation(float interpolatedTime, Transformation t){
//這裡的interpolatedTime可以自己打印出來看看,可以再這裡做屬性值的改變或者其他
}
}