具有多个视图的overridePendingTransition

时间:2013-09-05 08:14:34

标签: java android xml animation translation

overridePendingTransition需要2个动画并为整个屏幕设置动画。

我如何在2个活动之间转换动画2个单独的视图?

基本上我想打开一扇双门,当我按下按钮,看到它背后的下一个活动。

我可以轻松地将屏幕滑动到下一个屏幕:

overridePendingTransition(R.anim.transition_left_in, R.anim.transition_left_out);

我可以打开双门,但没有像这样的过渡:

public void loginOnClick(View view)
{
    final RelativeLayout leftPanel = (RelativeLayout)findViewById(R.id.RelativeLayoutLeft);
    final RelativeLayout rightPanel = (RelativeLayout)findViewById(R.id.RelativeLayoutRight);

    Animation animLeft = new TranslateAnimation(1, 0, 1, -1, 1, 0, 1, 0);
    animLeft.setDuration(1000);
    animLeft.setFillAfter(true);
    animLeft.setAnimationListener(new Animation.AnimationListener()
    {
        @Override public void onAnimationStart(Animation animation)
        {
        }

        @Override public void onAnimationEnd(Animation animation)
        {
            leftPanel.setVisibility(View.GONE);
            rightPanel.setVisibility(View.GONE);
        }

        @Override public void onAnimationRepeat(Animation animation)
        {
        }
    });
    Animation animRight = new TranslateAnimation(1, 0, 1, 1, 1, 0, 1, 0);
    animRight.setDuration(1000);
    animRight.setFillAfter(true);

    leftPanel.startAnimation(animLeft);
    rightPanel.startAnimation(animRight);
}

我知道我可以在动画后更改活动,但我希望在动画上一个活动时看到下一个活动。

我该怎么办?
任何帮助将不胜感激。

修改

我找到的最佳解决方法是在第一个活动xml中使用include来包含第二个活动的上下文。 (在将打开的大门后面)但它不完全是我想要的,因为UI上的某些东西在第二种方法的onCreate()之后发生了变化。

2 个答案:

答案 0 :(得分:2)

我可以建议一个解决方法:

通过添加以下内容禁用主题的默认窗口动画:

<item name="android:windowAnimationStyle">@null</item>

现在,就在Activity_2必须开始之前,Activity_1已经double doors了。而不是在Activity_1中执行动画,而是在Activity_2的onCreate(Bundle)中启动它。

您需要将double doors放在Activity_2的布局上。在活动_2 loginOnClick(View view)中调用setContentView(R.layout.activity_2)后,将onCreate(Bundle)的内容放置。

由于windowAnimationStyle设置为null,因此从Activity_1到Activity_2的转换似乎是无缝的。

编辑刚刚对此进行了测试,效果很好。

答案 1 :(得分:0)

您可以为其他活动添加动画,使其从屏幕中间向外水平朝向设备侧面增长,速度与门打开时相同。这会使看到门打开应用程序的错觉。