带有KTX的Android动画

时间:2019-09-04 10:17:42

标签: android android-animation kotlin-android-extensions android-ktx

我的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'

非常感谢您:)

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
    }