Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使imageview动画(重复infinty,持续时间不可更改)运行固定时间?_Java_Android_Animation_Imageview_Rotateanimation - Fatal编程技术网

Java 如何使imageview动画(重复infinty,持续时间不可更改)运行固定时间?

Java 如何使imageview动画(重复infinty,持续时间不可更改)运行固定时间?,java,android,animation,imageview,rotateanimation,Java,Android,Animation,Imageview,Rotateanimation,我有一个在imageview对象上运行的RotateAnimation 此动画使对象以每次旋转(myAnimation.setDuration(x))的速率旋转 我有相当多的对象和动画以不同的速率旋转,所有对象都设置为repeatCount(无限) 我想让他们在一个固定的时间内做他们的事情(即:3个旋转物体,物体1旋转5圈,物体2旋转20.33圈,物体3旋转0.4圈) /e倒计时结束时每个对象的位置保存在某处/返回也很重要,因为我将从这些坐标开始另一个旋转动画 还要注意的是,所有这些旋转都是围绕

我有一个在imageview对象上运行的RotateAnimation

此动画使对象以每次旋转(myAnimation.setDuration(x))的速率旋转

我有相当多的对象和动画以不同的速率旋转,所有对象都设置为repeatCount(无限)

我想让他们在一个固定的时间内做他们的事情(即:3个旋转物体,物体1旋转5圈,物体2旋转20.33圈,物体3旋转0.4圈)

/e倒计时结束时每个对象的位置保存在某处/返回也很重要,因为我将从这些坐标开始另一个旋转动画

还要注意的是,所有这些旋转都是围绕每个对象自己的中心进行的,所以我所说的坐标是指度

有人有什么想法吗


谢谢

我对安卓系统还比较陌生,但我也遇到过类似的问题,因此我将根据我对您想要实现的目标的理解,尝试回答您的问题

所以我在想,如果你想让你的物体旋转固定的圈数,你不需要无限旋转它们。相反,您可以根据需要以喜欢的速率旋转每个对象一次。所以,为了论证,我们假设你希望你的物体以每次旋转5秒的速度旋转,或者换句话说,花5秒来完成一个完整的360度旋转。我将使用您的问题中的对象3作为示例,该对象需要进行0.4次转换:

// define animation for 0.4 turn object
final RotateAnimation rotateObj3_part1 = new RotateAnimation(0, 360*0.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 360*0.4 = 144 deg
rotateObj3_part1.setDuration((long) (5000*0.4)); // 5 sec for full circle, 2 sec for 0.4 of circle
rotateObj3_part1.setFillAfter(true); // this will make object stay in rotated position
rotateObj3_part1.setRepeatCount(0);

ImageView object3 = (ImageView)findViewById(R.id.object3);
object3.startAnimation(rotateObj3_part1);
现在,要从上一个位置开始更多地旋转同一对象,请定义新的旋转动画,该动画从旧的旋转动画结束的位置开始:

final RotateAnimation rotateObj3_part2 = new RotateAnimation(360*0.4f, newEndPoint, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // so now rotate from 144 degrees to newEndPoint degrees
rotateObj3_part2.setDuration((long) (5000*((newEndPoint-360*0.4f))/360); // scale 5 sec to new change in degrees
rotateObj3_part2.setFillAfter(true);
rotateObj3_part2.setRepeatCount(0);
object3.startAnimation(rotateObj3_part2);
我希望这是有意义的,并让你得到你想要的结果