93

我正在编纂我的徽标活动和我的主要活动之间的过渡效果,但我有一个问题,即在消失之前活动移动到顶部:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <alpha
        android:duration="2000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" >
    </alpha>

</set>

我怎样才能改进这段代码以获得消失的效果?

4

4 回答 4

252

您可以创建自己的.xml 动画文件以淡入新的Activity并淡出当前的Activity

淡入淡出.xml

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

淡出.xml

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

在这样的代码中使用它:(在你的内部Activity

Intent i = new Intent(this, NewlyStartedActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

上面的代码将淡出当前活动Activity并淡入新开始Activity,从而实现平滑过渡。

更新:@Dan J 指出使用内置的 Android 动画可以提高性能,我在做一些测试后确实发现了这种情况。如果您更喜欢使用内置动画,请使用:

overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

请注意我引用android.R而不是R访问资源 ID。

更新:现在通常的做法是使用API 级别 19 中引入的 Transition 类执行转换。

于 2013-08-27T21:38:21.057 回答
25

只需重新发布 oleynikd的答案,因为它简单整洁

Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
    android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); 
startActivity(intent, bundle);
于 2017-05-04T07:58:21.610 回答
19

您还可以在活动中添加动画,在下面的 onCreate 方法中,因为 overridePendingTransition 不适用于某些移动设备,或者它取决于设备设置...

View view = findViewById(android.R.id.content);
Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in);
mLoadAnimation.setDuration(2000);
view.startAnimation(mLoadAnimation);
于 2014-02-26T08:08:06.553 回答
18

您还可以在style.xml文件中使用此代码,因此您无需在activity.java中编写任何其他内容

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowAnimationStyle">@style/AppTheme.WindowTransition</item>
</style>

<!-- Setting window animation -->
<style name="AppTheme.WindowTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
于 2018-02-16T05:54:04.253 回答