gpt4 book ai didi

android - 配置更改后共享元素返回/重新进入转换中断

转载 作者:行者123 更新时间:2023-11-30 01:01:57 25 4
gpt4 key购买 nike

我有 Activity A 和 B,具有共享元素转换,工作正常,直到:

  1. 纵向从 A -> B 过渡
  2. 在 B 中,将方向更改为横向
  3. 回击
  4. 共享元素不知道返回哪里,它只是愚蠢地漂浮在原地,直到重新进入转换完成,然后消失

这看起来很尴尬。我理解这是因为共享元素最初是连接到 A 的肖像风景,而不是风景。有什么办法可以减轻疼痛吗?

我使用与上述完全相同的场景检查了 Google Play 商店应用程序,从列表中选择一个应用程序,然后在方向更改后返回列表。它似乎只是在没有任何动画的情况下弹出回列表,但这已经好多了,因为至少没有中断的过渡和 float 元素。实现这种行为的方法是什么?


更新:澄清一下,以下场景非常好:

  1. 纵向从 A -> B 过渡
  2. 在 B 中,将方向更改为横向
  3. 再次改变方向,回到纵向
  4. 回击
  5. 共享元素完美地完成了它的工作并返回到 A

所以这不是 View 在配置更改后无法生存的情况。

最佳答案

我正在回答我自己的问题,至少是关于如何在方向改变后不进行转换就返回到之前的 Activity 的部分。

  1. 在 Activity onCreate() 中,创建或恢复保持原始屏幕方向的保留 Fragment
  2. 覆盖 onBackPressed() 并检查当前屏幕方向是否与原始屏幕方向相同。如果没有,就完成 Activity(没有转换)。

    private State state;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    initState();
    }

    private void initState() {
    String tag = "state";
    FragmentManager fm = getFragmentManager();

    // find or create fragment
    this.state = (State) fm.findFragmentByTag(tag);
    if (this.state == null) {
    this.state = new State();
    fm.beginTransaction().add(this.state, tag).commit();

    // store original screen orientation
    this.state.originalOrientation = getResources().getConfiguration().orientation;
    }
    }

    @Override
    public void onBackPressed() {
    // shared element would be broken
    if (getResources().getConfiguration().orientation != state.originalOrientation) {
    // no transition
    finish();

    } else {
    // default behavior
    super.onBackPressed();
    }
    }

    public static class State extends Fragment {
    private int originalOrientation;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
    }
    }

修复原始问题显然会更好,但没有转换仍然比损坏的转换更好。

关于android - 配置更改后共享元素返回/重新进入转换中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39280911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com