我正在使用动画器 (ObjectAnimator)来对视图的一些属性(缩放、旋转)进行动画效果。
当将ObjectAnimator设置到目标视图时,目标视图可以正常地进行动画。
但是现在有一个额外的要求,即在一段时间后将视图恢复到原始位置(重置)。
我试图使用cancel()取消动画,但这只会取消动画而不会重置视图。
可能的解决方案:创建另一个动画器,该动画器只执行初始动画器的相反操作。
还有其他重置视图的方法吗?
我正在使用动画器 (ObjectAnimator)来对视图的一些属性(缩放、旋转)进行动画效果。
当将ObjectAnimator设置到目标视图时,目标视图可以正常地进行动画。
但是现在有一个额外的要求,即在一段时间后将视图恢复到原始位置(重置)。
我试图使用cancel()取消动画,但这只会取消动画而不会重置视图。
可能的解决方案:创建另一个动画器,该动画器只执行初始动画器的相反操作。
还有其他重置视图的方法吗?
ObjectAnimator.cancel()
和ObjectAnimator.end()
方法并不会取消动画对被动画对象的效果,而只是在调用这些方法时取消它们的执行(有关更多详细信息,请参见ValueAnimator文档)。ObjectAnimator
上设置一个监听器,并在调用OnAnimationEnd
/OnAnimationCancel
时,手动重置视图的属性。ObjectAnimator.reverse()
方法来反转动画的执行,从而重置视图的属性。最好在动画结束时调用反转开始,因此您可能需要在动画上放置一个监听器,并检查调用带有要反转的动画的OnAnimationEnd
时机。ViewPropertyAnimator
对视图进行动画处理,并且一遍又一遍地使用addView()
和removeView()
,以便不创建新视图,但是一个视图只能显示一次。当你移除视图时,再次调用addView()
,它不会显示,但你可以看到属性可见性是可见的,animationListener
也被调用了。这很奇怪。我曾经遇到过与我的视图相关的同样问题。所以我用了一个技巧来解决这个问题。我们假设有一个视图,在点击后应用动画。
viewLayout.arrow_back.setOnClickListener {arrow ->
arrow.animate().rotationXBy(50F) // this is a just simple anim not so usefull
.start()
arrow.isEnabled = false
}
我希望它能帮助到某人。
clearAnimation()
从您调用startAnimation();
的视图中删除动画
如果您的意思是在动画结束后将视图重置为其原始外观,则始终将setFillAfter(false);
设置为动画。setFillAfter(false);
完美地解决了问题。 - Megaetron