今天學習如何做出動畫效果
主要使用 ValueAnimator 和 ObjectAnimator 來達成
下方程式碼為使用範例:
val animator = ValueAnimator.ofFloat(0f, -350f, 0f)
animator.duration = 500
animator.addUpdateListener {
valueBall.translationY = it.animatedValue as Float
}
valueBall.setOnClickListener {
animator.start()
}
ObjectAnimator 是對物件屬性的操作
所以我們依序傳入物件、屬性名稱、數值組...就可以達成動畫的效果
一樣要注意 start() 才會執行
val animator = ObjectAnimator.ofFloat(
objectBall,
"rotationY",
0.0f, 360.0f)
animator.duration = 500
objectBall.setOnClickListener{
animator.start()
}
AnimatorSet 可以用來把不同的 ObjectAnimator 包成一包執行,可以設定有先後順序或是同時執行等等
下方程式碼先製作了 2 個 animator,接著有個按鈕分別執行 "連續播放動畫" 和 "同時播放動畫"
val animator1 = ObjectAnimator.ofFloat(
setBall01,
"translationY",
0f, -500f, 0f
)
val animator2 = ObjectAnimator.ofFloat(
setBall02,
"translationY",
0f, 500f, 0f
)
val animatorSet_onebyone = AnimatorSet()
animatorSet_onebyone.duration = 500
oneByOne.setOnClickListener {
if (!animatorSet_onebyone.isRunning) {
animatorSet_onebyone.play(animator1).after(animator2)
animatorSet_onebyone.start()
}
}
val animatorSet_sameTime = AnimatorSet()
animatorSet_sameTime.duration = 500
sameTime.setOnClickListener {
if (!animatorSet_sameTime.isStarted) {
animatorSet_sameTime.playTogether(animator1, animator2)
animatorSet_sameTime.start()
}
}
這是 ObjectAnimator 的其中一個設定,表示說這個動畫的呈現該套用什麼演算法
基本上有以下幾種:
套用方式:指定給 animator.interpolator 即可,動畫即會有改變速度愈來愈快、愈來愈慢... 等等不同的效果
val animator = ObjectAnimator.ofFloat(interpolatorBall, "translationX", 0f, 500f, 0f)
animator.interpolator = LinearInterpolator()
animator.start()