如何在片段转换中淡出非共享视图?

Posted

技术标签:

【中文标题】如何在片段转换中淡出非共享视图?【英文标题】:How to fade out non shared views in fragment transition? 【发布时间】:2018-02-21 15:58:00 【问题描述】:

我目前正在尝试使用片段共享元素转换,并且基本想法可行。我有两个非常相似的屏幕(见截图),共享转换适用于表单,但是两个按钮(登录/社交)没有优雅地转换,它们只是在退出时消失,并在进入时重新出现。是否可以指定这两个视图项在过渡期间淡出和淡入?

片段 A

 getActivity().getSupportFragmentManager().beginTransaction()
            .addSharedElement(btn_next, ViewCompat.getTransitionName(btn_next))
            .addSharedElement(et_email, ViewCompat.getTransitionName(et_email))
            .addSharedElement(ll_form, ViewCompat.getTransitionName(ll_form))
            .replace(R.id.fl_content, new LoginFragment())
            .addToBackStack(null)
            .commit();

片段 B

@Override
public void onCreate(@Nullable Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setSharedElementEnterTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.move));

【问题讨论】:

试试这个答案***.com/questions/28386397/… 【参考方案1】:

所以经过更多的挖掘,我了解到非共享视图被称为transitioning views,如AndroidDesignPatterns.com 中所述

内容转换决定了活动的非共享视图(也称为转换视图)如何进入或退出活动场景。

在同一网站的另一个 article 上找到

setExitTransition() - A’s exit transition animates transitioning views out of the scene when A starts B.
setEnterTransition() - B’s enter transition animates transitioning views into the scene when A starts B.
setReturnTransition() - B’s return transition animates transitioning views out of the scene when B returns to A.
setReenterTransition() - A’s reenter transition animates transitioning views into the scene when B returns to A.

所以这个简单的一行解决了我的问题。

setExitTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade));

【讨论】:

以上是关于如何在片段转换中淡出非共享视图?的主要内容,如果未能解决你的问题,请参考以下文章

视图之间的共享元素转换(不是活动或片段)

共享元素转换:活动到嵌套在另一个活动中的片段

不同活动的片段之间的共享元素转换

共享转换片段到片段不起作用

跨活动的片段之间的共享元素转换不一致

如何在作为选项卡的 2 个片段之间共享视图模型