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、onBackPressed
或 finishFromTransition
。 None 其中似乎让我回到原来的 activity 我在堆栈上。如果我从 activity #2 返回,activity #1 的 onResume()
确实会被调用..但它好像从未设置其内容或初始化任何视图。如果我再次启动该应用程序,原来的 activity 会调用其 onCreate
,它会重新绑定并转发视图。
另一个需要注意的奇怪的事情是 android 软 "back"、"home" 和 "recents" 按钮在输入此空白时不显示 activity.事实上,唯一看起来像是从我的应用程序中保留下来的是状态栏颜色。
更新:我注意到如果我不让过渡完成,然后按回。它会回到我以前的 activity 就好了。只有当转换完成并且我进入下一个 activity 时,我 运行 才遇到问题。
试试这个。
在您的 res/ 目录中创建一个 "anim" 文件夹。
在 anim 文件夹中创建 2 个名为 in_from_right.xml 和 out_from_left.xml
的布局资源文件
将以下代码添加到 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
方法对布局进行充气后,一切正常:-)
我有两个活动和它们之间的幻灯片过渡。很简单。但是,无论出于何种原因,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、onBackPressed
或 finishFromTransition
。 None 其中似乎让我回到原来的 activity 我在堆栈上。如果我从 activity #2 返回,activity #1 的 onResume()
确实会被调用..但它好像从未设置其内容或初始化任何视图。如果我再次启动该应用程序,原来的 activity 会调用其 onCreate
,它会重新绑定并转发视图。
另一个需要注意的奇怪的事情是 android 软 "back"、"home" 和 "recents" 按钮在输入此空白时不显示 activity.事实上,唯一看起来像是从我的应用程序中保留下来的是状态栏颜色。
更新:我注意到如果我不让过渡完成,然后按回。它会回到我以前的 activity 就好了。只有当转换完成并且我进入下一个 activity 时,我 运行 才遇到问题。
试试这个。
在您的 res/ 目录中创建一个 "anim" 文件夹。
在 anim 文件夹中创建 2 个名为 in_from_right.xml 和 out_from_left.xml
的布局资源文件
将以下代码添加到 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
方法对布局进行充气后,一切正常:-)