1. 動畫估值器(TypeEvaluator)
使用估值器可以計算動畫元素的目標(biāo)屬性值,例如ArgbEvaluator可以在顏色變化的動畫中計算出當(dāng)前的顏色,使用方式如下:
// 構(gòu)造ArgbEvaluator對象
val argbEvaluator = ArgbEvaluator()
// fraction 通常來自差值器算出的百分比
val fraction = 0.5f
// 這里表示一個從藍(lán)變紅的動畫中,當(dāng)差值器的值是0.5f時,顏色應(yīng)該處于何種狀態(tài)
val color = (argbEvaluator.evaluate(fraction, Color.BLUE, Color.RED) as Int)
除ArgbEvaluator外,Android還默認(rèn)提供多種估值器,如IntEvaluator、FloatEvaluator、PointFEvaluator
2. Property
這是在屬性動畫中用到的類,常見的子類有IntProperty、FloatProperty, 該類可以方便地在動畫中設(shè)置View的各個屬性,新建一個自定義Property用作在屬性動畫中修改View的高度,示例如下:
@RequiresApi(api = Build.VERSION_CODES.N)
public class HeightProperty extends IntProperty<View> {
public PropertyHeight() {
super("PropertyHeight");
}
@Override
public void setValue(View object, int value) {
object.getLayoutParams().height = value;
object.setLayoutParams(object.getLayoutParams());
}
@Override
public Integer get(View object) {
return object.getLayoutParams().height;
}
}
HeightProperty 使用示例如下
// 獲取到要做動畫的View對象
val view = findViewById<View>(R.id.progress)
// 構(gòu)造動畫對象
val pullA = ObjectAnimator.ofPropertyValuesHolder(view, PropertyValuesHolder.ofInt(HeightProperty(), 700, 1200))
.also {
it.duration = 900L
}
// 開啟動畫
pullA.start()