【问题标题】:ObjectAnimator makes imageview disappearObjectAnimator 使 imageview 消失
【发布时间】:2020-05-06 17:59:58
【问题描述】:

我正在尝试制作摇晃动画。当我在 XML 中执行此操作时效果很好,如下所示:

<set xmlns:android="http://schemas.android.com/apk/res/android">
 <rotate
     android:duration="50"
     android:fromDegrees="-0.02"
     android:pivotX="50%"
     android:pivotY="50%"
     android:repeatCount="30"
     android:repeatMode="reverse"
     android:interpolator="@android:anim/linear_interpolator"
     android:toDegrees="0.02" />
 <translate
     android:fromXDelta="-0.02"
     android:toXDelta="0.02"
     android:repeatCount="30"
     android:repeatMode="reverse"
     android:interpolator="@android:anim/linear_interpolator"
     android:duration="50" />
</set>

但我想用 ObjectAnimator 来做,所以我可以用 AnimatorSet 在我做的其他动画的同时播放这个动画。

我试着这样做:

val pvhR = PropertyValuesHolder.ofFloat(View.ROTATION, -0.05f, 0.05f)
val pvhT = PropertyValuesHolder.ofFloat(View.TRANSLATION_X, -0.05f, 0.05f)

val rotate = ObjectAnimator.ofPropertyValuesHolder(imageView, pvhR). apply {
    duration = 50
    repeatCount = 20
    repeatMode = ValueAnimator.REVERSE
}
val translate = ObjectAnimator.ofPropertyValuesHolder(imageView, pvhT).apply {
    duration = 50
    repeatCount = 20
    repeatMode = ValueAnimator.REVERSE
}

但是翻译动画让我的 imageView 消失了。我之前遇到过旋转动画的问题(当我尝试做旋转动画时,imageView 改变了它的位置,但我使用.ofPropertyValuesHolder 修复了它,而不是使用.ofFloat)。可能是因为我使用的是custom library that implements a zoomable/pinchable layout

现在我正在尝试制作这个翻译动画,但即使使用 .ofPropertyValuesHolderz 也无法正常工作。它仅适用于 XML,但正如我所说,我不能将它放在 AnimatorSet() 中。

【问题讨论】:

    标签: android kotlin android-animation android-view


    【解决方案1】:

    试试这个代码

            val set = AnimatorSet()
            val rotation = ObjectAnimator.ofFloat(imageViewMain, "rotation", -0.05f, 0.05f).apply {
                duration = 50
                repeatCount = 20
                repeatMode = ValueAnimator.REVERSE
            }
            val translation = ObjectAnimator.ofFloat(imageViewMain, "translationX", -0.05f, 0.05f).apply {
                duration = 50
                repeatCount = 20
                repeatMode = ValueAnimator.REVERSE
            }
            set.playTogether(rotation, translation)
    

    【讨论】:

    • 在回答问题时,尝试解释代码的作用以及它如何解决问题,而不是仅仅粘贴一段代码。
    猜你喜欢
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多