ObjectAnimator заставляет изображение исчезать - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь сделать анимацию встряхивания. Это хорошо работает, когда я делаю это в 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
}

Но анимация translate заставляет мой imageView исчезать. Раньше у меня были проблемы с анимацией вращения (когда я пытался сделать анимацию вращения, imageView изменил свое положение, но я исправил это, используя .ofPropertyValuesHolder вместо .ofFloat). Вероятно потому, что я использую пользовательскую библиотеку , которая реализует макет с возможностью масштабирования / увеличения .

Теперь я пытаюсь сделать эту анимацию перевода, но она не работает даже с .ofPropertyValuesHolderz. Он работает только с XML, но, как я уже сказал, я не могу поместить его в AnimatorSet().

1 Ответ

0 голосов
/ 07 мая 2020

Попробуйте этот код 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)

...