Android过渡动画无法正常工作

9

Android过渡效果对于"explode"和"slide"是相同的。实际上,我认为它并没有做动画效果。同时,持续时间也不是6秒钟。我该如何解决这个问题?

代码源自这里

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

        Transition ts = new Slide();  //Slide(); //Explode();

        ts.setDuration(6000);
        getWindow().setEnterTransition( ts );
        getWindow().setExitTransition( ts );
        setContentView(R.layout.activity_main_activity);



    }




    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finishAfterTransition();
    }

Style-v21.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="BaseAppTheme" parent="android:Theme.Material.Light">
        <item name="android:colorControlHighlight">#0000AA</item>
        <item name="android:navigationBarColor">#0000AA</item>
        <item name="android:colorPrimaryDark">#0000AA</item>
        <item name="android:colorPrimary">#0000FF</item>
        <item name="android:colorAccent">#00FF00</item>
        <item name="android:windowBackground">@android:color/black</item>
        <item name="android:textColorPrimary">@android:color/white</item>

        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>

        <!-- specify enter and exit transitions -->
        <item name="android:windowEnterTransition">@transition/explode</item>
        <item name="android:windowExitTransition">@transition/explode</item>
    </style>
</resources>

我也有这个问题!虽然被接受的答案解决了问题,但我想知道为什么你的代码不起作用。 - nilsi
1
这个问题解决了吗?我遇到了类似的问题。 - Brian
4个回答

18

在我的情况下,由于某种原因,我在安卓设备的开发人员选项中关闭了转场动画。

只需前往“设置”->“开发人员选项”->“转场动画比例”,将其设置为“动画比例1x”即可。


1
给这个人一个奖章和甜甜圈!! - Varun Ajay Gupta

5

您可以使用此功能启动带有过渡效果的新活动

startActivity(new Intent(this, NewActivity.class));
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);

创建文件res/anim/slide_in_right.xml。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false" >
     <translate android:duration="1000" android:fromXDelta="100%" android:toXDelta="0%" />
    <alpha android:duration="1000" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>

创建文件 res/anim/slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false" >
     <translate android:duration="2000" android:fromXDelta="0%" android:toXDelta="-100%"/>
     <alpha android:duration="2000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>

那么,如果在更改活动时仍然需要显式引用XML文件,setExitTransition(ts)是做什么的?我一直在遵循这个,它似乎说您可以仅在Java中设置转换。我是否误解了? - user5457243
14
这是一个糟糕的答案,它没有使用更新的Transitions API(该API是问题中使用的API,也是未来所有活动转换的下一代API)。 - Brian
2
这里是专业的翻译引擎,我们不接受与题目无关的请求。请提供正确的翻译内容。 - abh22ishek
@Brian 你有使用Transitions API的可行示例吗?我尝试按照这个链接https://developer.android.com/training/transitions/start-activity ,但无法使其正常工作。 - Etienne Lawlor

4
我发现我需要认真实施。
ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, test, "transition_name");
ActivityCompat.startActivity(TourAndLoginActivity.this, new Intent(TourAndLoginActivity.this, LoginActivity.class), activityOptionsCompat.toBundle());

还是有些疑惑,但我不知道为什么我们需要一个共享对象来获取进入/退出转换。如果我提供null而不是ActivityOptionsCompat,那么就没有转换效果了。


当您在活动或片段中时,您将传递什么用于测试视图? - Stoycho Andreev
1
@Sniper 我错过了一个没有转换视图的构建器,这个问题在另一个问题中被指出:ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(TourAndLoginActivity.this); 就足够了。 - Boy
我明白你的意思,谢谢你提醒。但是为了使用这些新的转场效果,ActivityOptionsCompat是必须的。 - Stoycho Andreev

3

不要忘记在你的AndroidManifest.xml中为活动或整个包应用主题。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.package"
android:theme="@style/BaseAppTheme">
    ....
    ....
</manifest>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接