【问题标题】:Android activity back transition brakes when going back 2 screens返回 2 个屏幕时,Android 活动返回过渡刹车
【发布时间】:2021-06-02 09:30:52
【问题描述】:

我做了一个简单的例子来证明ActivityOptions.makeSceneTransitionAnimation(activity)有问题。

我有 3 个活动:A、B 和 C。 流程很简单:A -> B -> C

所有活动都有相同的风格:

<style name="TransitionsTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:windowEnterTransition">@transition/slide_in_from_bottom</item>
    <item name="android:windowExitTransition">@transition/slide_out_to_bottom</item>
</style>

每当我去:A -&gt; B -&gt; C -&gt; B (back button) -&gt; A (back button)最后一个动画(A -&gt; C)没有播放。

只做A -&gt; B -&gt; A (back button)时效果很好

这是我开始活动的方式:

fun start(activity: Activity) {
            val intent = Intent(activity, TransitionActivityA::class.java) //or B or C
            val transitionsOptions = ActivityOptions.makeSceneTransitionAnimation(activity)
            activity.startActivity(intent, transitionsOptions.toBundle())
        }

演示问题的应用程序:https://github.com/jkwiecien/AndroidCaseStudies/tree/transitions 使用分支transitions

这是 Android 错误还是我做错了什么?

【问题讨论】:

  • 您是否尝试通过调用overridePendingTransition() 方法来覆盖Activity 的onBackPressed?喜欢这个问题的答案:stackoverflow.com/questions/28512662/…
  • A -&gt; B -&gt; C -&gt; B (back button) -&gt; A (back button) - 这是什么意思?从 CB -> back buttonA -> back button 到(预期)C ???或从C -> back buttonB -> back butttonA ???无论如何,this post 可能会对您有所帮助。
  • 似乎在模拟器上运行良好(api 24 和 api 27),它是特定于某些 Android API 的吗?
  • 是的,在我的情况下,它不适用于 API 30,但适用于 23 和 24。
  • Launchmode 有时会与 Transitions 混淆,如果您使用的不是默认的可能是它的来源

标签: android android-animation android-support-library android-transitions


【解决方案1】:

它不起作用,因为ActivityB 是由ActivityC“启动”的,而它确实适用于转换到ActivityB,因为ActivityC 是由它启动的。

看来您必须手动覆盖onBackPressed() 并从ActivityB 启动ActivityA,使用反向ActivityOptions。这样做的唯一方法是在finish() 之后调用overridePendingTransition()

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多