我的Android应用程序中有一些动画,我想更改代码以利用Android KTX。可悲的是,我不太了解the documentation about it。有人可以告诉我如何借助Android KTX改进此代码吗?
view
.animate()
.translationY(view.height.toFloat())
.setDuration(3000)
.setInterpolator(AccelerateInterpolator())
.setListener(object : Animator.AnimatorListener {
override fun onAnimationStart(animation: Animator?) {}
override fun onAnimationRepeat(animation: Animator?) {}
override fun onAnimationCancel(animation: Animator?) {}
override fun onAnimationEnd(animation: Animator?) {
// Do whatever I want
}
})
当然,我已经在Gradle文件中添加了依赖项:
implementation 'androidx.core:core-ktx:1.0.2'
非常感谢您:)
答案 0 :(得分:2)
Android KTX 为Animator
实例提供了一些动画事件侦听器功能。当view.animate()
返回ViewPropertyAnimator
的实例时,您应该使用Animator
的子类(如ObjectAnimator
)才能使用 KTX 功能。例如:
ObjectAnimator.ofFloat(view, "translationY", view.height.toFloat()).apply {
duration = 3000
interpolator = AccelerateInterpolator()
// Using KTX extension function:
doOnEnd { /** Do whatever you want **/ }
start()
}
答案 1 :(得分:1)
Android KTX具有doOnEnd { /** Do whatever you want **/ }
和其他android.animation.Animator
扩展功能。调用view.animate()
时,它返回ViewPropertyAnimator
,这是从android.animation.Animator
类继承的 not 。因此,您无法view.animate().doOnEnd { /** Do whatever you want **/ }
由Android KTX提供。
但是,动画结束时,您可以使用withEndAction进行任何操作。 withEndAction
是默认ViewPropertyAnimator
的一部分,因此,您无需安装Android KTX即可使用:
view
.animate()
.translationY(image.height.toFloat())
.setDuration(3000)
.setInterpolator(AccelerateInterpolator())
.withEndAction {
// Do whatever you want
}