活动过渡结束后视图不可见

时间:2018-06-20 14:46:36

标签: android android-transitions shared-element-transition

我最近在活动转换方面遇到了一个非常奇怪的问题。我正在尝试制作带有排除项的幻灯片,这些排除项包括本机状态栏,本机导航栏和我的自定义底部导航栏。因此,我基于文档(link here)创建了一段代码,该代码在大多数情况下都能很好地工作,但是有时活动中的所有视图的可见性都设置为View.INVISIBLE(我从Layout Inspector知道这一事实)。

因此,我有活动A和活动B。然后我通过startActivity()从活动A导航到B。当我单击活动B时,有时过渡效果很好,但是在某些情况下,活动A的所有视图(底部导航栏除外,该视图均不包含在过渡中)都设置为View.INVISIBLE

我的代码:

活动A:

Intent i = new Intent(this, ActivityB.class);

    Transition slide = new Slide(Gravity.RIGHT);
    slide.excludeTarget(findViewById(R.id.bottom_navigation_bar), true);
    slide.excludeTarget(findViewById(android.R.id.navigationBarBackground), true);
    slide.excludeTarget(findViewById(android.R.id.statusBarBackground), true);
    getWindow().setExitTransition(slide);
    startActivity(i,
            ActivityOptionsCompat.makeSceneTransitionAnimation(this, createPairs()).toBundle());


private Pair[] createPairs() {
    Pair[] pairs = new Pair[2];
    pairs[0] = Pair.create(findViewById(android.R.id.statusBarBackground), Window.STATUS_BAR_BACKGROUND_TRANSITION_NAME);
    pairs[1] = Pair.create(findViewById(android.R.id.navigationBarBackground), Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME);
    return pairs;
}

活动B:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
    setContentView(R.layout.activity);

    final View decor = getWindow().getDecorView();
    decor.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            decor.getViewTreeObserver().removeOnPreDrawListener(this);
            Transition fade = new Fade();
            fade.excludeTarget(findViewById(R.id.bottom_navigation_bar), true);
            fade.excludeTarget(findViewById(android.R.id.navigationBarBackground), true);
            fade.excludeTarget(findViewById(android.R.id.statusBarBackground), true);
            getWindow().setEnterTransition(fade);
            return true;
        }
    });

0 个答案:

没有答案