2012-06-17 65 views
1

我想为28个不同的视图分配28个不同的旋转动画,并在活动开始时启动它们。动画应该都有随机的startOffset和Duration。 我试过这段代码,但似乎所有的动画都有相同的值。在多个ImageView上旋转动画

RotateAnimation rotate = new RotateAnimation(0.0f, 360.0f, 
     Animation.RELATIVE_TO_SELF, 0.9f, Animation.RELATIVE_TO_SELF, 0.5f); 

ImageView imageView; 

Random r = new Random(); 
int delayOffset = 0; 
int rotationDuration = 200; 


for (int i = 0; i < ids.length; i++) { 

    rotate.reset(); 

    imageView = (ImageView) findViewById(ids[i]); 
    imageView.clearAnimation(); 

    delayOffset = r.nextInt(500 - 0); 
    rotationDuration = r.nextInt(10000 - 200) + 200; 


    rotate.setStartOffset(delayOffset); 
    rotate.setDuration(rotationDuration); 


    imageView.startAnimation(rotate); 
} 

我在做什么错?

+0

尝试在您的for循环中创建一个RotateAnimation的新实例 – L7ColWinters

回答

0

您正在使用完全相同的动画实例,因此所有视图都以最新的值开始。

您应该为每个视图创建一个全新的动画。

+0

听起来像它会工作。我会在今天晚些时候尝试。但对我来说,使用28个动画实例似乎有点矫枉过正 - 当我只需要更改2个属性时。 – Peter

+0

它只是纯数据类,所以没关系。如果您的目标仅限于API 11及以上版本,则可以使用新的动画API,这可能更容易使用,尽管我从未尝试过。它应该更快更平滑,因为它使用GPU。 –