0

我有一个大约有 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);

但是问题来了:当使用activity的alpha值淡出时,当alpha值降低时整个activity变成灰色。这在白色背景下看起来并不漂亮。

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

4

3 回答 3

1

一种方法是将视图包装在 RelativeLayout 中,然后膨胀视图并将其添加到具有 00ffffff 背景颜色和 fill_parent 参数的外部 RelativeLayout。

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

于 2013-03-14T15:21:36.253 回答
1

这是来自 Google 的一位 Android 图形专家的很酷的博客文章 - Old Views Don't Die;他们只是消失了

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

于 2013-03-14T15:44:04.587 回答
0

我在 npace 提到的文章的启发下回答了我的问题。你会在下面找到我的淡出方法。它使用我上面已经创建的动画来淡出父容器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);
于 2013-03-14T17:26:52.907 回答