ViewAnimator使用旋转动画在视图之间转换

时间:2011-10-06 16:23:54

标签: android android-layout view android-animation

我想使用ViewAnimator从一个视图转换到另一个视图(在我的测试应用程序中,视图是TextViews)。我的两个动画如下所示。我看到的行为是一旦我触发aniimator就开始动画,而不是让InAnimation运行并且一旦完成OutAnimation运行。我所看到的看起来像一个风车 - 旋转的视图垂直于旋转的视图。我想看到视图旋转从正常的水平位置(0度)到垂直(90度);然后我想看到旋转的视图从垂直(-90度)变为水平(0度)。

@动画/ rotate_out.xml

<?xml version="1.0" encoding="UTF-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0" android:toDegrees="90" android:pivotX="50%"
    android:pivotY="50%" android:repeatCount="0" android:duration="500"
    android:interpolator="@android:anim/linear_interpolator">
</rotate>

@动画/ rotate_in.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:repeatCount="0" android:duration="500"
    android:interpolator="@android:anim/linear_interpolator">
</rotate>

并在主要活动onCreate ...

va = (ViewAnimator) findViewById(R.id.ViewFlipper01);
va.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate_in));
va.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate_out));

任何想法?

2 个答案:

答案 0 :(得分:3)

可能吗? @动画/ rotate_outin.xml

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

答案 1 :(得分:2)

可以找到ViewAnimator的源代码here。根据那里的showOnly()方法,有意的是两个动画都是并行启动的,所以当一个视图“移出”时,另一个视图已经“移入”。 因此,为了实现您的目标,您必须为动画中添加一些延迟,以便在外部动画完成时启动。你可以设置,例如android:duration =“500”表示动画,android:startOffset =“500”表示动画中的动画。只需确保两者的值相同。