3

我的 Android 应用中有一些动画,我想更改我的代码以利用 Android KTX。可悲的是,我不太了解有关它的文档。有人可以告诉我如何在 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'

非常感谢你:)

4

2 回答 2

7

Android KTXdoOnEnd { /** Do whatever you want **/ }具有android.animation.Animator. 当你调用时view.animate()它返回ViewPropertyAnimator不是从类继承的。因此,您不能由 Android KTX 提供。android.animation.Animatorview.animate().doOnEnd { /** Do whatever you want **/ }

但是,您可以使用withEndAction在动画结束时执行任何操作。withEndAction是 default 的一部分ViewPropertyAnimator,因此,您不需要 Android KTX 即可使用它:

view
    .animate()
    .translationY(image.height.toFloat())
    .setDuration(3000)
    .setInterpolator(AccelerateInterpolator())
    .withEndAction {
        // Do whatever you want
    }
于 2019-09-11T06:54:27.970 回答
3

Android KTXAnimator为实例提供了一些动画事件监听函数。当view.animate()返回 的实例时ViewPropertyAnimator,您应该使用Animator(like ObjectAnimator) 的子类才能使用KTX功能。例如:

ObjectAnimator.ofFloat(view, "translationY", view.height.toFloat()).apply {
    duration = 3000
    interpolator = AccelerateInterpolator()
    // Using KTX extension function:
    doOnEnd { /** Do whatever you want **/ }
    start()
}
于 2019-09-09T08:03:03.187 回答