自定義動畫Animation

  創建自定義動畫非常簡單,只要實現他的applyTransformation的邏輯就可以了,不過通常情況下還要覆蓋父類的initialize方法來實現一些初始化工作。
這裏寫圖片描述

模擬電視機關閉效果動畫

import android.graphics.Camera;
import android.graphics.Matrix;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.Transformation;

public class CustomTV extends Animation {

    private int mCenterWidth;
    private int mCenterHeight;
    private Camera mCamera = new Camera();
    private float mRotateY = 0.0f;

    @Override
    public void initialize(int width,
                           int height,
                           int parentWidth,
                           int parentHeight) {

        super.initialize(width, height, parentWidth, parentHeight);
        // 設置默認時長
        setDuration(1000);
        // 動畫結束後保留狀態
        setFillAfter(true);
        // 設置默認插值器
        setInterpolator(new AccelerateInterpolator());
        mCenterWidth = width / 2;
        mCenterHeight = height / 2;
    }

    // 暴露接口-設置旋轉角度
    public void setRotateY(float rorateY) {
        mRotateY = rorateY;
    }

    @Override
    protected void applyTransformation(
            float interpolatedTime,
            Transformation t) {
        final Matrix matrix = t.getMatrix();
        matrix.preScale(1,
                1 - interpolatedTime,
                mCenterWidth,
                mCenterHeight);
    }
}

  關於Interpolator 時間插值類,定義動畫變換的速度。能夠實現alpha/scale/translate/rotate動畫的加速、減速和重複等。Interpolator類其實是一個空接口,繼承自TimeInterpolator,TimeInterpolator時間插值器允許動畫進行非線性運動變換,如加速和限速等,該接口中只有接口中有一個方法 float getInterpolation(float input)這個方法。傳入的值是一個0.0~1.0的值,返回值可以小於0.0也可以大於1.0。

AccelerateDecelerateInterpolator    動畫開始與結束的地方速率改變比較慢,在中間的時候加速。
AccelerateInterpolator         動畫開始的地方速率改變比較慢,然後開始加速。
AnticipateInterpolator         開始的時候向後然後向前甩。
AnticipateOvershootInterpolator    開始的時候向後然後向前甩一定值後返回最後的值。
BounceInterpolator           動畫結束的時候彈起。
CycleInterpolator            動畫循環播放特定的次數,速率改變沿着正弦曲線。
DecelerateInterpolator           在動畫開始的地方快然後慢。
LinearInterpolator            以常量速率改變。
OvershootInterpolator          向前甩一定值後再回到原來位置。
PathInterpolator             新增的,就是可以定義路徑座標,然後可以按照路徑座標來跑動;注意其座標並不是 XY,而是單方向,也就是我可以從0~1,然後彈回0.5 然後又彈到0.7 有到0.3,直到最後時間結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章