Android:如何停止在 ImageView 上应用的无限动画?

Posted

技术标签:

【中文标题】Android:如何停止在 ImageView 上应用的无限动画?【英文标题】:Android: How can I stop an infinite animation applied on an ImageView? 【发布时间】:2011-04-24 05:55:33 【问题描述】:

我有一个 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()。

【问题讨论】:

【参考方案1】:

使用clearAnimation() 停止动画。 View 上没有 loadAnimation()

【讨论】:

好的,谢谢。所以只有 startAnimation() 和 clearAnimation() 适用于视图。 clearAnimation() 对我不起作用, setAnimation(null) 对我有用 嗨@CommonsWare,你能告诉我如何停止动画 onClick 视图本身,它是动画但不是单独的按钮? img.clearAnimation() 是最好的解决方案 - img.setAnimation(null) 也可以,但不太优雅 - img.startAnimation(null) 导致崩溃 我在放大/缩小的 imageView 上有一个无限动画。当我在单击视图后试图停止动画时, anim.cancel() 和 img.clearAnimation() 都不适合我。最后 img.setAnimation(null) 为我工作。【参考方案2】:

您也可以致电anim.cancel();,但您也应该在此之后立即致电anim.reset();。 然后当你想重新启动它时,只需在视图上调用startAnimation

【讨论】:

animation.cancel();需要 API 8 级,要在 API 7 及以上停止动画,唯一的选项是 view.clearAnimation(); cancel() 只会将整个动画重置为初始状态。但是如何保持上次停止的状态呢? 需要同时调用 anim.cancel() 和 anim.reset() 的证明。 developer.android.com/reference/android/view/animation/…【参考方案3】:

只需添加以下两行。

anim?.cancelAnimation()

anim?.progress = 0f

【讨论】:

以上是关于Android:如何停止在 ImageView 上应用的无限动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中停止处理程序

如何在相机上移动 ImageView?

如何在android中根据上面的imageview对齐textview

如何在 Android 上的 textview 或 imageview 上设置涟漪效果?

android如何在imageview控件上绘制点

在 Android 上使用 scaletype centerCrop 时如何调整 ImageView 的裁剪量?