在Android中使用视图动画

时间:2014-03-26 03:59:48

标签: android android-animation

考虑我有类似的东西:

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
>
    <rotate
    android:fromDegrees="0"
    android:toDegrees="10"
    android:duration="200" >

    <rotate
    android:fromDegrees="20"
    android:toDegrees="0"
    android:startOffset="200"
    android:duration="200" 
    android:fillBefore="false" 
    android:fillEnabled="true">
</set>

这里我希望在200 ms时间后应用第二次旋转(在第一次旋转的最终结果上)。但结果,我看到android:fromDegrees(第二次旋转)甚至在200 ms之前被应用为前200ms的默认20度旋转。我希望整个块只在200 ms后生效。我该如何克服这个问题?

还有任何拇指规则要理解 机器人:fromDegrees, 机器人:toDegrees 因为它可以采用负值以及0-20或20-0之类的值。 我们如何正确地解释这些值?

提前致谢。

2 个答案:

答案 0 :(得分:0)

创建两个动画。这应该是首先发生的,另一个是在200ms之后。向第一个动画添加动画侦听器,当动画停止时,它会调用onAnimationEnd方法,在该方法中,启动另一个动画

第一个动画文件

<rotate
android:fromDegrees="0"
android:toDegrees="10"
android:duration="200" >

第二个动画文件

<rotate
android:fromDegrees="20"
android:toDegrees="0"
android:startOffset="200"
android:duration="200" 
android:fillBefore="false" 
android:fillEnabled="true">

设置:

anim.setAnimationListener(new AnimationListener() {
      public void onAnimationStart(Animation anim)
      {
      };
      public void onAnimationRepeat(Animation anim)
      {
      };
      public void onAnimationEnd(Animation anim)
      {
           layout.startAnimation(the second animation here);
      };
});   

修改

<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="true"
     android:fillAfter="true">

编辑2: 默认情况下,在集合中排序为together 将其更改为sequentially并检查动画

<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="true"
     android:fillAfter="true"
   android:ordering="sequentially">

答案 1 :(得分:0)

我认为问题中的代码片段的行为完全符合我的预期,只有一个不需要的结果。第二次旋转实际上仅在第一次旋转完成后才开始。这里的问题是:

android:fromDegrees="20"
来自第二旋转块的

被应用于第一次旋转的最终结果。如果您希望几何体从20度旋转到0度,那么应该发生这种情况。由于我想使用第一个旋转块的最终结果,我替换了

android:fromDegrees="20"
android:toDegrees="0"

android:fromDegrees="0"
android:toDegrees="-20"

因此输出符合预期。