Android活动转换订单

时间:2012-02-07 21:03:18

标签: android animation android-activity transitions

在一项活动中,我正在尝试在两个Activities之间进行自定义转换。我希望当前Activity缩小到其大小的一半,然后让x值执行缩放转换,使其看起来好像Activity在3-D中旋转。然后,在动画结束后,我希望在新Activity上以完全相反的顺序发生相同的动画。

我的问题是,如何在动画中暂停,以便输入Activity的动画直到退出动画结束后才开始?我必须使用overridePendingTransition方法,因此所有传递的动画都必须是来自int的{​​{1}}值。否则,使用R.anim会很容易。但我想不出办法来做到这一点。

有什么想法吗?

编辑:我已经弄清楚了,所以你可以查看答案!

1 个答案:

答案 0 :(得分:4)

对于那些试图完成同样事情的人,我想通了。秘诀是在XML中使用android:startOffset。代码如下:

退出动画:

<set xmlns:android="http://schemas.android.com/apk/res/android">
  <scale
      android:fromXScale="1.0" android:toXScale="0.8"
      android:fromYScale="1.0" android:toYScale="0.8"
      android:pivotX="50%p" android:pivotY="50%p"
      android:interpolator="@android:anim/accelerate_interpolator"
      android:duration="100" />
  <scale
      android:fromXScale="1.0" android:toXScale="0.0"
      android:fromYScale="1.0" android:toYScale="1.0"
      android:pivotX="50%p" android:pivotY="50%p"
      android:interpolator="@android:anim/accelerate_interpolator"
      android:duration="150"
      android:startOffset="100" />
</set>

入口动画:

<set xmlns:android="http://schemas.android.com/apk/res/android">
  <scale
      android:fromXScale="0.0" android:toXScale="1.0"
      android:fromYScale="1.0" android:toYScale="1.0"
      android:pivotX="50%p" android:pivotY="50%p"
      android:interpolator="@android:anim/accelerate_interpolator"
      android:duration="150"
      android:startOffset="250" />

  <scale
      android:fromXScale="0.8" android:toXScale="1.0"
      android:fromYScale="0.8" android:toYScale="1.0"
      android:pivotX="50%p" android:pivotY="50%p"
      android:interpolator="@android:anim/accelerate_interpolator"
      android:duration="100"
      android:startOffset="400" />
</set>

然后是Java代码:

startActivity(new Intent(this, YourNextActivity.class));
overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);

这会创建一个平滑,适时的动画,使得看起来好像正在创建的下一个Activity位于当前Activity的“后面”。