Android 配置更改后共享元素返回/重新输入转换中断
我有一个活动A和B,带有一个共享元素转换,它工作得很好,直到:Android 配置更改后共享元素返回/重新输入转换中断,android,material-design,android-transitions,shared-element-transition,Android,Material Design,Android Transitions,Shared Element Transition,我有一个活动A和B,带有一个共享元素转换,它工作得很好,直到: 纵向从A->B过渡 在B中,将方向改为横向 回击 共享元素不知道返回到哪里,它只是愚蠢地在原地浮动,直到重新进入转换完成,然后消失 这看起来很尴尬。我理解这是因为最初共享元素连接到A的肖像风景,而不是风景。有什么办法可以减轻疼痛吗 我使用与上述完全相同的场景检查了Google Play store应用程序,从列表中选择一个应用程序,然后在方向更改后返回列表。它似乎只是在没有任何动画的情况下弹出到列表中,但这已经好得多了,因为至少没有
更新:为了清楚起见,以下场景非常适合:
因此,这并不是视图在配置更改后无法保存的情况。我在回答我自己的问题,至少是关于如何在方向更改后不进行转换而返回到上一个活动的部分
onCreate()
中,创建或恢复保留原始屏幕方向的保留片段onBackPressed()
并检查当前屏幕方向是否与原始屏幕方向相同。如果没有,只需完成活动(无转换)
显然,修复原始问题会更好,但没有转换比损坏的转换更好。共享元素转换中包含的每个元素是否都有
android:id
?你能出示你的代码吗?是的,我确实有,如果我在返回A之前切换回活动B中的纵向模式(因此,双方向改变,先切换到纵向,然后再切换到原始模式),一切正常。请告知,我是否正确理解问题的原因(在我的原始问题中陈述)?
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);
}
}