我想做一个抖动动画。当我在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
). 可能是因为我用的是 实现可缩放布局的自定义库.
现在我想做这个翻译动画,但它不工作,即使是与 .ofPropertyValuesHolderz
. 它只能用XML工作,但正如我所说,我不能把它放在一个 AnimatorSet()
.
试试这段代码
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)