之前我们在ValueAnimation中使用了ofInt和ofFloat函数,但是如果要传入其他类型的数据,就需要使用到另一个函数ofObject()。它可以传入任何类型的参数。
比如,我们想实现如下的动画效果,文本框中的内容从A变化到Z。
我们使用ofObjecte可以如下编码
val valueAnimator:ValueAnimator = ValueAnimator.ofObject(MyCharEvaluator(),Character('A'),Character('Z'))
valueAnimator.setDuration(5000)
valueAnimator.addUpdateListener {
val currentValue:Character = it.animatedValue as Character
Log.d(TAG, "start: currentValue = ${currentValue}")
textview.setText(currentValue.toString())
}
valueAnimator.start()
在以上的ofObject中,第一个参数是一个我们自定义的Evaluator,另外两个参数是初始值和结束值。
import android.animation.TypeEvaluator
/**
* 项目名称 AndroidViewBook
* 创建时间 2022/1/17 10:56 下午
*/
class MyCharEvaluator: TypeEvaluator<Character> {
override fun evaluate(
fraction: Float,
startValue: Character?,
endValue: Character?
): Character {
val startInt:Int = startValue?.charValue()!!.toInt()
val endInt:Int = endValue?.charValue()!!.toInt()
val currentInt:Int = (startInt + fraction * (endInt - startInt)).toInt()
val result = currentInt.toByte().toChar() as Character
return result
}
}
我们利用了字符与数字的转换。
参考资料《Android自定义控件开发与实战》