活动转换黑屏问题

4

我有一个WelcomeActivity -> HomeActivity的流程,并使用 finish()/supportFinishAfterTransition() 关闭了WelcomeActivity。我想要实现幻灯片过渡或淡入淡出过渡(其他建议也可以)。

我已经进行了研究,发现有两种或以上的方法可以实现:一种是使用 anim.xml 文件的 overridePendingTransition 方法,另一种是使用转换效果(来自于Android文档)并使用 transition.xml 文件…

我已经都尝试过了,但两者都没有得到想要的结果:

  1. 对于动画文件:我得到了这个丑陋的中间过渡黑屏:

fade_in.xml:

    <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="300" />

fade_out.xml:

    <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:zAdjustment="top"
       android:duration="300" />

WelcomeActivity:(我尝试在重写待处理事务之前终止)

    startActivity(Intent(this, HomeActivity::class.java))
    overridePendingTransition(R.anim.fade_in, R.anim.fade_out)
    finish()
  1. 关于转场动画:我无法让WelcomeActivity正确关闭:它要么在动画开始之前关闭,要么根本不关闭。我正在遵循Android文档..我也尝试了这个:

style.xml

    <item name="android:windowActivityTransitions">true</item>
    <item name="android:windowEnterTransition">@transition/enter_fade</item>
    <item name="android:windowExitTransition">@transition/exit_fade</item>

我的另一个问题是,我应该采用哪种方法?Google是在推动使用过渡效果来启动新活动,还是推动使用动画效果?
1个回答

1

我通常做的是启动一个活动(任何你喜欢的方式,这里列出了不同的方法)。
我使用这两个文件来进行幻灯片转换:

slide_out_left.xml:

<?xml version="1.0" encoding="utf-8"?>
 
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />
</set>

slide_in_right.xml:

<?xml version="1.0" encoding="utf-8"?>
 
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
</set>

然后我像这样启动一个活动(这是):

startActivity(MainActivity.this, SecondActivity.class);
overridePendingTransition(R.anim.slide_in_right.xml, R.anim.slide_in_left.xml);
finish();

使用此功能,活动可以从右到左平稳退出,为新活动腾出位置。
对于黑屏问题,请在AndroidManifest.xml文件中将该活动的主题设置为半透明。
android:theme="@android:style/Theme.Translucent"

所以您的代码将类似于这样

<activity android:name=".Activity"
        android:theme="@android:style/Theme.Translucent" />

以下是针对黑屏问题的答案,参考自:https://dev59.com/SWw15IYBdhLWcg3wqNkB#6468734


我认为你犯了一个错误:slide_in和slide_out都是从-100到0的。 - Martin
抱歉,我忘记编辑了。复制时不小心出错了,我现在会立即进行编辑。 - Gourav
是的,这个方法可以实现目标,但我认为它不适用于我的情况,因为我从一个没有导航栏的屏幕切换到一个有导航栏的屏幕,所以看起来有点奇怪。至于淡入淡出效果,我仍然无法在没有黑屏的情况下实现它。 - Martin

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