我有一个图像视图,我在其上应用了旋转动画。动画效果很好。在触摸下,我尝试使用cancel()停止旋转动画,使用reset()重置动画并使用clearAnimation()清除视图上的动画。但动画又恢复了原来的位置。如何使用触发事件发生时的值停止动画并从停止的位置重新启动?
我的动画在xml中定义如下
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="360"
android:toDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:fillEnabled="true"
android:duration="200000"
android:repeatMode="restart"
android:repeatCount="infinite"
android:interpolator="@android:anim/linear_interpolator"/>
我正在尝试使用以下代码停止动画
private void stopAnimation(){
mRotateAntiClockwiseAnimation.cancel();
mRotateAntiClockwiseAnimation.reset();
imageView.clearAnimation();
mRotateAntiClockwiseAnimator.end();
mRotateAntiClockwiseAnimator.cancel();
stopAnimationForImageButton();
}
我正在使用以下代码在我的视图上设置动画
mRotateAntiClockwiseAnimation = AnimationUtils.loadAnimation(context, R.anim.rotate_anticlockwise);
mRotateAntiClockwiseAnimation.setFillEnabled(true);
mRotateAntiClockwiseAnimation.setFillAfter(true);
imageView.setAnimation(mRotateAntiClockwiseAnimation);
mRotateAntiClockwiseAnimation.startNow();
imageView.invalidate();
正如你所看到的,即使使用cancel()或reset()也无助于在动画被触及的位置停止动画。任何指针都会有所帮助
答案 0 :(得分:4)
我想通过启动动画师然后设置currentPlayTime()来实现它。文档清楚地告诉我(我只是偶然发现)如果动画还没有开始,使用这种方法设置的currentPlayTime将不会前进!
将动画的位置设置为指定的时间点。此时间应介于0和动画的总持续时间之间,包括任何重复。如果尚未启动动画,则在设置为此时它不会前进;它只会将时间设置为此值,并根据该时间执行任何适当的操作。如果动画已在运行,则setCurrentPlayTime()会将当前播放时间设置为此值并从该点继续播放。 http://developer.android.com/reference/android/animation/ValueAnimator.html#setCurrentPlayTime(long)
private void stopAnimation(){
mCurrentPlayTime = mRotateAntiClockwiseAnimator.getCurrentPlayTime();
mRotateAntiClockwiseAnimator.cancel();
}
private void startAnimation() {
mRotateAntiClockwiseAnimator.start();
mRotateAntiClockwiseAnimator.setCurrentPlayTime(mCurrentPlayTime);
}
答案 1 :(得分:0)
在API级别19中添加了暂停功能。Here您可以阅读如何实现它。此方法使用ObjectAnimator,这比您使用的常用 Animation 类复杂得多。但是,还有另一种可能有用的替代trick 最诚挚的问候。