我有4 ImageButton
个简单的Layout
。当我点击这些按钮中的任何一个时,会启动一个新的TabActivity
,并选择相应的Tab
(0-3)。标签的样式设置为ImageView
,每个标签都与之前的按钮相匹配。
编辑以下的一些进展
TL; DR: 如何在返回调用Activity时设置不同的SharedElementTransition,以便"返回"转换不是原始转换的反转,可能会为不同的View
设置动画?
我还使用SharedElementTransition将ImageButton设置为选定的标签,该标签在输入新Activity
时有效,但如果我浏览新Fragment
的{{1}},并按下与我到达的Activity
不同的后退按钮,反向的SharedElementTransition与当前的Fragment
我不匹配,它只是反转所使用的转换发起新活动。
我可以看到这是预期的行为,但我怎样才能覆盖它?我希望反向转换从当前Tab
开始,而不是从我之前Tab
到达的Tab
开始。
我希望这个可耻的图片有助于理解这个问题(它显示了我想要获得的行为 - 从橙色按钮启动新活动,导航到绿色标签的片段,然后按回到第一个活动转换从绿色标签 - ):
问题涉及的代码不多,但以防万一我发布新的Activity
:
Activity
然后,在到达的(...)
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(fromActivity, sharedView, transitionName);
fromActivity.startActivityForResult(toIntent, requestCode, options.toBundle());
中,我在Activity
方法中设置TabLayout
,如下所示{每个onCreate()
的代码片段:
Tab
提前致谢
编辑 - 取得了一些进展
嗯,还有一个重要的问题需要解决,但我已设法在反向动画上获得正确的tab0 = (...);
ImageView v0 = (ImageView) tab0.findViewById(R.id.tab_img);
ApiLevelHelper.setImageDrawable(this, v0, R.drawable.menu_btn_0);
tabLayout.getTabAt(0).setCustomView(tab0);
转换。为了实现这一点,我之前没有附加到Tab
Tab
的转换名称,并且我在新活动的ImageView
方法上设置了转换名称仅限于选定的onCreate()
。然后在Tab
来电中,我清除所有onBackPressed()
Tab
的所有过渡名称,并将其设置为当前ImageView
。这样,反向动画从正确的Tab
开始,但最终位于原始Tab
的位置,而不是新位置。
到目前为止我已尝试过:
ImageView
方法内反向转换到的ImageView。可悲的是,在调用此方法之前,动画条件似乎已经确定。onActivityResult(...)
调用super.onBackPressed()
之前设置我想要的名称。它没有改变任何东西。一些代码显示了如何设置当前Activity
的转换名称:
Tab
然后,在第一个//Second Activity
@Override
public void onBackPressed() {
if (ApiLevelHelper.isAtLeast(Build.VERSION_CODES.LOLLIPOP)) {
for (ImageView v : tabImages) {
v.setTransitionName(null);
}
int selectedTab = mTabLayout.getSelectedTabPosition();
tabImages[selectedTab].setTransitionName(getString(R.string.transition_menu_tab));
Intent output = new Intent();
output.putExtra("selected_tab", selectedTab);
setResult(RESULT_OK, output);
}
super.onBackPressed();
}
...:
Activity
我想我不知何故需要操纵以前计算过的变换......还在调查。