星期四, 1月 26, 2012

Animation (七)

Android應用程式學習筆記

Using a TypeEvaluator

如果你想對Android系統來說為未知的型態動畫,你可以透過TypeEvaluator介面建立自己的evaluator實現動畫。Android系統所知的型態為int、float或是顏色,由IntEvaluator、FloatEvaluator、ArgbEvaluator型態的evaluator支援。

在TypeEvaluator介面中只有一個方法去執行,那就是evaluate()方法,此方法允許你正在使用的animator在當前的動畫中回傳適合的動畫屬性值。FloatEvaluator類別的實現:


public class FloatEvaluator implements TypeEvaluator {

    public Object evaluate(float fraction, Object startValue, Object endValue) {
        float startFloat = ((Number) startValue).floatValue();
        return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
    }
}


Using Interpolators

Interpolator用來定義動畫中的數值該如何計算。例如,你可以指定整段動畫線性地播放,意旨在整段時間中動畫平均地移動;或者指定動畫為非線性地動畫,比如,加速或是減速在動畫的開始或是結尾。

動畫系董中的Interpolators都會接收來自Animator用來表示動畫經過的時間的分數值,Interpolator修改此分數值並符合針對Animator提供的動畫型態。Android系統提供一組普通的Interpolator都放在android.view.animation package,如果這些無法滿足需求,你可以實現TimeInterpolator介面建立自己的。

舉例,預設的AccelerateDecelerateInterpolator及LinearInterpolator如何計算interpolated分數值得比較如下。


AccelerateDecelerateInterpolator
public float getInterpolation(float input) {
    return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}
LinearInterpolator
public float getInterpolation(float input) {
    return input;
}

下表顯示一個動畫由這些interpolators計算的大約數值。


ms elapsedElapsed fraction/Interpolated fraction (Linear)Interpolated fraction (Accelerate/Decelerate)
000
200.2.1
400.4.345
600.6.8
800.8.9
100011

如表顯示,LinearInterpolator以等速改變數值,每200毫秒改變0.2;AccelerateDeccelerateInterpolator在200毫秒到600毫秒間改變數值的速度比LinearInterpolator快,在600毫秒到1000毫秒間比LinearInterpolator慢。


沒有留言:

張貼留言