2011-12-07 56 views
2

我正在动画图像视图,并且向右移动并同时旋转。我可以让物品移动使用Android动画,在同一时间移动和旋转

animation = new TranslateAnimation(0, level, 0, 0); 
animation.setDuration(1000); 
animation.setRepeatCount(0); 
animation.setFillAfter(true); 

等级是我在当时定义的变量。我知道旋转的代码是

RotateAnimation rotate = new RotateAnimation(0,rotate,0,0); 
    rotate.setDuration(1000); 
    rotate.setRepeatCount(0); 
    animation.setFillAfter(true); 
    bPick.setAnimation(rotate); 

再次旋转变量我已定义在顶部。

我的问题是,我该如何结合这两个?我一直在使用一个线程

private Runnable myThread = new Runnable() { 

    @Override 
    public void run() { 
     while (level < 100) { 
      try { 
       myHandle.sendMessage(myHandle.obtainMessage()); 
       Thread.sleep(15); 
      } catch (Throwable t) { 
      } 
     } 

    } 

    Handler myHandle = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 

      level++; 
      animation = new TranslateAnimation(0, level, 0, 0); 
      animation.setDuration(1000); 
      animation.setRepeatCount(0); 
      animation.setFillAfter(true); 
      bPick.setAnimation(animation); 

     } 
    }; 
}; 

这将有它移动到右边精细试过了,但是如果我在旋转尝试添加为好,它不工作,否则就会崩溃。

任何帮助将不胜感激,干杯

编辑

我需要这是我有一个接一个压力表的原因。

Pick left

我需要计取,同时慢慢地向右旋转,以向右移动。它向右移动多少是基于一个int变量设置的。它会从0 - 100 0是起始位置和100,其将被移动到右侧,看起来像这样

Pick right

回答

15

您需要使用AnimationSet

XML中的一个例子,它使图像从左到右,上下和左右移动,同时进行。

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Rotate --> 
    <rotate android:fromDegrees="30" android:toDegrees="0" 
     android:pivotX="50%" android:pivotY="50%" android:repeatCount="4" 
     android:repeatMode="reverse" android:duration="2000" 
     android:interpolator="@android:anim/linear_interpolator" /> 
    <!-- Left to right --> 
    <translate android:fromXDelta="-50%p" android:toXDelta="150%p" 
     android:fromYDelta="100%p" android:toYDelta="0" android:duration="10000" 
     android:interpolator="@android:anim/linear_interpolator" /> 
    <!-- Up and down bob --> 
    <translate android:fromXDelta="0" android:toXDelta="0" 
     android:fromYDelta="30" android:toYDelta="-30" android:repeatMode="reverse" 
     android:repeatCount="4" android:interpolator="@android:anim/linear_interpolator" 
     android:duration="2000" /> 
</set> 

代码示例(不上面复制):

AnimationSet animationSet = new AnimationSet(true); 

TranslateAnimation a = new TranslateAnimation(
     Animation.ABSOLUTE,200, Animation.ABSOLUTE,200, 
     Animation.ABSOLUTE,200, Animation.ABSOLUTE,200); 
a.setDuration(1000);  

RotateAnimation r = new RotateAnimation(0f, -90f,200,200); 
r.setStartOffset(1000); 
r.setDuration(1000); 

animationSet.addAnimation(a); 
animationSet.addAnimation(r); 

(来自here两者)​​

+0

非常感谢代码,它几近完美。最后一件事。我需要能够设置它从Java中移动和旋转多少,因为选择移动的距离取决于我从Java中设置的一个int值。有什么办法可以做到这一点? – AdamM

+1

当然。您将在代码和RotateAnimation中创建一个AnimationSet并将其添加到动画集​​。本示例向您展示了如何在代码中执行此操作:http://stackoverflow.com/questions/4977138/full-example-of-how-to-programmatically-do-rotateanimations。 – Ricky

+1

我已经更新了上面的帖子来帮助你。 “RotateAnimation”在构造函数中使用pivot等。 – Ricky