1. 程式人生 > >關於Android動畫的一些整理

關於Android動畫的一些整理

動畫有屬性動畫、逐幀動畫、補間動畫,在低版本(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可以自己打印出來看看,可以再這裡做屬性值的改變或者其他
 }
}