如何在切换活动时淡出所有视图

时间:2013-03-14 15:15:21

标签: android animation

我有一个约4-5次观看的活动。它有白色背景。 理想情况下,我希望将整个活动淡化为纯白色,然后淡化新活动。 但由于不可能使用彩色动画,我已经放弃了这个想法。我制作的动画如下所示:

淡入:

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="1200"/>
</set>

淡出:

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="1200"/>
</set>

我只是通过在我的所有活动中添加以下代码行来设置动画:

overridePendingTransition( R.animator.fadein, R.animator.fadeout);

但问题在于:当使用活动的alpha值淡出时,当alpha值降低时,整个活动变为灰色。白色背景下看起来并不漂亮。

所以我想出了淡出所有关于活动的观点的想法。我的问题:我该如何正确地做到这一点?顺便说一句,如果有人有更好的想法,请随时告诉我。谢谢!

3 个答案:

答案 0 :(得分:1)

一种方法是将视图包装在RelativeLayout中,然后给视图充气并将其添加到外部RelativeLayout,背景颜色为00ffffff和fill_parent参数。

在开始新活动之前,使用处理程序和runnable以设置的间隔增加alpha值(并使视图无效)。一旦alpha为255,启动新活动。根据自己的喜好调整Handler.postDelayed()的速度。

答案 1 :(得分:1)

这是一篇来自谷歌Android图形专家的精彩博文 - Old Views Don't Die; They Just Fade Away

我相信你可以将它用于你的项目。查看他在动画上的其他文章和YouTube视频,它们非常棒。祝你好运!

答案 2 :(得分:0)

我在提到的文章空间的启发下回答了我的问题。你会在下面找到我的淡出方法。它使用我上面创建的动画来淡出父容器RelativeLayout中的所有视图。

RelativeLayout container = findViewById(R.id.mainContainer);

for(int i = 0; i < container.getChildCount(); i++)
            container.getChildAt(i).startAnimation(AnimationUtils.loadAnimation(c, R.animator.fadeout));

        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                for(int i = 0; i < container.getChildCount(); i++)
                    container.getChildAt(i).setVisibility(View.INVISIBLE);
                c.startActivity(intent);
            }
        }, fadeDuration);