ActivityOptions.makeSceneTransitionAnimation 创建一个空 activity

ActivityOptions.makeSceneTransitionAnimation creates an empty activity

我有两个活动和它们之间的幻灯片过渡。很简单。但是,无论出于何种原因,ActivityOptions.makeSceneTransitionAnimation(Activity) 似乎在堆栈上创建了一个空的 activity。或者更确切地说,它将我的原始 activity 保留在堆栈中,但将根视图清空,因此它看起来像一个空白 activity。

我使用最普通的方式从文档创建场景转换。我不太确定为什么这是一个问题,除非它是一个已知问题。还有其他人遇到过这个吗?如果有,你修好了吗?

public void startSearchActivity(MenuItem view) {
    Intent searchActivity = new Intent(this, SearchActivity.class);
    ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation(HomeActivity.this);
    startActivity(searchActivity, transitionActivityOptions.toBundle());
}

private void setupWindowAnimations() {
    Transition slide = new Slide();
    slide.setDuration(1000);
    ((Slide)slide).setSlideEdge(Gravity.LEFT);
    getWindow().setEnterTransition(slide);
    getWindow().setReenterTransition(slide);
    getWindow().setExitTransition(slide);
}

然后在 activity #2 中,我简单地调用 finish、onBackPressedfinishFromTransition。 None 其中似乎让我回到原来的 activity 我在堆栈上。如果我从 activity #2 返回,activity #1 的 onResume() 确实会被调用..但它好像从未设置其内容或初始化任何视图。如果我再次启动该应用程序,原来的 activity 会调用其 onCreate,它会重新绑定并转发视图。

另一个需要注意的奇怪的事情是 android 软 "back"、"home" 和 "recents" 按钮在输入此空白时不显示 activity.事实上,唯一看起来像是从我的应用程序中保留下来的是状态栏颜色。

更新:我注意到如果我不让过渡完成,然后按回。它会回到我以前的 activity 就好了。只有当转换完成并且我进入下一个 activity 时,我 运行 才遇到问题。

试试这个。

  1. 在您的 res/ 目录中创建一个 "anim" 文件夹。

  2. 在 anim 文件夹中创建 2 个名为 in_from_right.xml 和 out_from_left.xml

  3. 的布局资源文件

将以下代码添加到 in_from_right.xml:

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

和下面的代码 out_from_left.xml:

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

现在将其添加到您的 Activity.java 文件

try {
                Intent searchActivity = new Intent(this,SearchActivty.class);

                searchActivty.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                startActivity(searchActivty);
            }catch (NullPointerException e){
                e.printStackTrace();
            }
            overridePendingTransition(R.anim.in_from_right, R.anim.out_from_left);

别忘了添加 anim 文件夹。

它会为你工作。

编码愉快。

想通了。在我的例子中,我在 styles.xml 中定义了一些转换。以编程方式向 activity 添加更多动画会导致此行为发生(按下系统后退按钮后空白 activity)。只需从 styles.xml 中删除任何 window*Transition 的痕迹,就可以开始了。

    <item name="android:windowEnterTransition">@transition/slide_from_right</item>
    <item name="android:windowExitTransition">@transition/slide_from_right</item>

哇...我想通了。事实证明,这暂时不在我们的控制范围内。这是 api 24+ 的问题。我查看了 makeSceneTransition,它对那些 api 有单独的逻辑(当然)。这是非常令人沮丧的。希望 google 能尽快解决这个问题。

在我的例子中,我为新的 Activity 覆盖了错误的 onCreate 方法。在使用另一种 onCreate 方法对布局进行充气后,一切正常:-)