我想使用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));
任何想法?
答案 0 :(得分:3)
<?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”表示动画中的动画。只需确保两者的值相同。