安卓:如何停止应用于ImageView的无限动画?

32

我有一个ImageView,我在它上面应用了旋转动画。由于我想让旋转持续进行,所以我在rotate.xml中将repeatCount设置为无限:

android:repeatCount="infinite"

在onCreate()方法中,我加载动画并启动它。

Animation myAnim    = AnimationUtils.loadAnimation(this, R.anim.rotate);
objectImg.startAnimation(myAnim); 
当按下按钮时,旋转必须停止。因此在我的onClick()中,我调用了clearAnimation()。
objectImg.startAnimation(myAnim); 

我的简单问题是停止动画是否正确。我假设clearAnimation()对应于loadAnimation(),但并没有stopAnimation()对应于startAnimation()。

4个回答

74

使用clearAnimation()来停止动画。在View中没有loadAnimation()


好的,谢谢。所以只有startAnimation()和clearAnimation()适用于视图。 - kiki
clearAnimation () 对我无效,setAnimation(null) 有效。 - Leon
嗨@CommonsWare,您能告诉我如何停止动画,而不是作为单独按钮进行动画的视图本身在单击时进行动画吗? - Raghavendra
我在一个imageView上实现了一个无限的放大/缩小动画。当我试图在点击视图后停止动画时,无论是anim.cancel()还是img.clearAnimation()都对我无效。 最终,img.setAnimation(null)能够解决我的问题。 - shaby
如果某人没有访问anim变量的权限,这是一个更好的解决方案。 - undefined
显示剩余2条评论

39

你也可以调用 anim.cancel(); 但你还应该立即调用 anim.reset();。 然后当你想要再次启动它时,只需在视图上调用 startAnimation


2
animation.cancel(); 需要API 8级别,对于API 7及以上停止动画的唯一选项是view.clearAnimation();。 - Toni Alvarez
3
cancel()方法将会重置整个动画到初始状态。但是如何保留最后一次停止时的状态? - IgorGanapolsky
需要同时调用anim.cancel()和anim.reset()的必要性证明。https://developer.android.com/reference/android/view/animation/Animation.html#cancel() - VKostenc

-1

只需添加以下两行代码即可。

anim?.cancelAnimation()

anim?.progress = 0f

-1
你可以通过从你的rotate.xml文件中删除这一行:android:repeatCount="infinite"来简单地完成它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接