ActivityOptions.makeSceneTransitionAnimation创建一个空活动

时间:2017-01-09 06:14:09

标签: android android-activity transition shared-element-transition

我有两个活动和它们之间的幻灯片转换。很简单。但是,无论出于何种原因,ActivityOptions.makeSceneTransitionAnimation(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);
}

然后在活动#2中,我只需拨打完成,onBackPressedfinishFromTransition。这些似乎都没有让我回到我在堆栈上的原始活动。如果我从活动#2返回,活动#1的onResume()会被调用..但就好像它从未获得其内容集或其任何视图初始化一样。如果我再次启动应用程序,则原始活动会调用onCreate来重新绑定并转发视图。

另一个值得注意的奇怪事项是,输入此空白活动时不会显示android软“后退”,“主页”和“最近”按钮。事实上,从我的应用程序中保留的唯一看起来就是状态栏颜色。

更新:我注意到如果我不让过渡完成,请按回。它会回到我以前的活动就好了。只有当转换结束时,我才会进入下一个遇到问题的活动。

4 个答案:

答案 0 :(得分:1)

想出来。在我的情况下,我在styles.xml中定义了一些过渡。以编程方式向活动添加更多动画会导致出现此行为(按下系统后退按钮后出现空白活动)。只需从styles.xml中删除任何窗口* Transition的痕迹,你就应该好了。

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

答案 1 :(得分:0)

试试这个。

  1. 创建一个&#34; anim&#34; res /目录中的文件夹。

  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);
    

    不要忘记添加动画文件夹。

    它适用于你。

    快乐的编码。

答案 2 :(得分:0)

哇...我明白了。结果证明它现在不受我们的控制。这是api 24+的一个问题。我查看了makeSceneTransition,它为那些api(当然)提供了独立的逻辑。这非常令人沮丧。希望谷歌能尽快解决这个问题。

答案 3 :(得分:0)

在我的情况下,我为新活动覆盖了错误的onCreate方法。在另一个onCreate方法上对布局进行充气后,一切正常: - )