2013-02-12 41 views
20

所以,我想同时旋转一些视图,所有视图都使用相同的旋转规格。问题在于,由于某些原因,第二个元素的旋转行为不同。显然这与动画对象实际上改变这两行代码之间的状态有关。很显然,我可以只创建一个单独的动画对象,并应用它,但我觉得还有一个更简单的方法(我有大约15次)将一个动画同时应用于多个视图

仅使第一种观点正确:

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); 
target.startAnimation(rotateAnim); 
lightBtn.startAnimation(rotateAnim); 

旋转都能够正确

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); 
Animation rotateAnim2 = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); 
target.startAnimation(rotateAnim); 
lightBtn.startAnimation(rotateAnim2); 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="-90" 
    android:toDegrees="0" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="500" android:fillAfter="true"> 

一有没有任何想法?

+1

尝试使用新的动画API(向后兼容性使用NineOldAndroids)。另外我建议观看此视频:http://www.youtube.com/watch?v = _UWXqFBF86U – Leandros 2013-02-12 20:59:45

+0

喜欢视频!但是据我所知,什么新的API是视频中的人做的?(至少在最后) – Jameo 2013-02-12 21:08:01

+1

错误的视频,对不起。 ;)http://www.youtube.com/watch?v=3UbJhmkeSig – Leandros 2013-02-12 21:10:16

回答

5

所以我想这恰恰是不可能的,所以我创建了一个辅助方法,只是将相同的动画视图列表:

public void doRotations(ArrayList<View> views, int start, int end, int xprop, float xscale, int yprop, float yscale, int duration, Boolean fillAfter){ 

    for(int i = 0; i < views.size(); i++){ 
     RotateAnimation temp = new RotateAnimation(start, end, xprop, xscale, yprop, yscale); 
     temp.setDuration(duration); 
     temp.setFillAfter(fillAfter); 
     views.get(i).startAnimation(temp); 
    } 
} 

绝对是一个黑客,但我想这就是所有我米能够马上做

+0

这的确可以并行运行动画,但如果仔细观察(因为您始终触发动画),则可以在动画中看到略微延迟。 – Mercury 2017-02-12 00:22:50

7

做这样的:

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "y", 100f); 
arrayListObjectAnimators.add(anim); 

ObjectAnimator anim1 = ObjectAnimator.ofFloat(view, "x", 0f); 
arrayListObjectAnimators.add(anim1); 

ObjectAnimator[] objectAnimators = arrayListObjectAnimators.toArray(new ObjectAnimator[arrayListObjectAnimators.size()]); 
AnimatorSet animSetXY = new AnimatorSet(); 
animSetXY.playTogether(objectAnimators); 
animSetXY.duration(1000); 
animSetXY.start(); 
+3

这并没有回答这个问题,如果我是正确的,你正在对同一视图应用2个动画。原始帖子想要将相同的动画应用于2个视图 – 2014-09-25 14:10:51

相关问题