【问题标题】:Android animation with KTX带有 KTX 的 Android 动画
【发布时间】:2019-09-04 10:17:42
【问题描述】:

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

提前非常感谢你:)

【问题讨论】:

  • 你只需要动画监听器上的onAnimationEnd方法吗? Animator 的 KTX 扩展旨在简化听众的创建。
  • @Edric 实际上我只需要onAnimationEnd。我该怎么做?
  • 您可以使用 AnimatorListenerAdapter 类代替 AnimatorListener。你不需要 ktx。

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


【解决方案1】:

Android KTX 具有doOnEnd { /** Do whatever you want **/ }android.animation.Animator 的其他扩展功能。当您调用view.animate() 时,它返回ViewPropertyAnimator,它不是 继承自android.animation.Animator 类。所以你不能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
    }

【讨论】:

    【解决方案2】:

    Android KTXAnimator 实例提供了一些动画事件监听函数。由于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()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      相关资源
      最近更新 更多