在onBackPressed

时间:2016-11-09 16:45:11

标签: android android-5.0-lollipop onbackpressed shared-element-transition

我有4 ImageButton个简单的Layout。当我点击这些按钮中的任何一个时,会启动一个新的TabActivity,并选择相应的Tab(0-3)。标签的样式设置为ImageView,每个标签都与之前的按钮相匹配。

编辑以下的一些进展

TL; DR: 如何在返回调用Activity时设置不同的SharedElementTransition,以便"返回"转换不是原始转换的反转,可能会为不同的View设置动画?

我还使用SharedElementTransition将ImageButton设置为选定的标签,该标签在输入新Activity时有效,但如果我浏览新Fragment的{​​{1}},并按下与我到达的Activity不同的后退按钮,反向的SharedElementTransition与当前的Fragment我不匹配,它只是反转所使用的转换发起新活动。

我可以看到这是预期的行为,但我怎样才能覆盖它?我希望反向转换从当前Tab开始,而不是从我之前Tab到达的Tab开始。

我希望这个可耻的图片有助于理解这个问题(它显示了我想要获得的行为 - 从橙色按钮启动新活动,导航到绿色标签的片段,然后按回到第一个活动转换从绿色标签 - ): Back transition problem

问题涉及的代码不多,但以防万一我发布新的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的位置,而不是新位置。

到目前为止我已尝试过:

  1. 清除第一个活动上的转换名称,并将其设置为我希望在ImageView方法内反向转换到的ImageView。可悲的是,在调用此方法之前,动画条件似乎已经确定。
  2. 静态引用父活动(知道这很糟糕,只是测试)并清除转换名称,并在从第二个onActivityResult(...)调用super.onBackPressed()之前设置我想要的名称。它没有改变任何东西。
  3. 一些代码显示了如何设置当前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

    我想我不知何故需要操纵以前计算过的变换......还在调查。

0 个答案:

没有答案