场景转换删除了一切

时间:2017-08-01 09:03:46

标签: android animation android-animation android-view android-transitions

我正在尝试将Draggable panel library与我的视频播放项目集成,到目前为止,它一直在满足我的需求。

首先我进行设置,以便DraggablePanel始终在我的视图Root中,以便在最大化时覆盖整个屏幕。

但现在我想从缩略图到视频窗口进行一次很好的转换,就像Youtube一样。我试过这个:

public static void launch(TransitionableClass t,
                          AppCompatActivity activity,
                          Fragment bottomFragment,
                          ViewGroup container,
                          View iv,
                          String transitionName,
                          String url) {
    DraggableVideoPanel draggableVideoPanel = new DraggableVideoPanel(activity.getApplicationContext());
    draggableVideoPanel.setFragmentManager(activity.getSupportFragmentManager());
    draggableVideoPanel.setBottomFragment(bottomFragment);

    TypedValue typedValue = new TypedValue();
    activity.getResources().getValue(R.dimen.x_scale_factor, typedValue, true);
    float xScaleFactor = typedValue.getFloat();
    typedValue = new TypedValue();
    activity.getResources().getValue(R.dimen.y_scale_factor, typedValue, true);
    float yScaleFactor = typedValue.getFloat();



    draggableVideoPanel.setXScaleFactor(xScaleFactor);
    draggableVideoPanel.setYScaleFactor(yScaleFactor);
    draggableVideoPanel.setTopViewHeight(
            activity.getResources().getDimensionPixelSize(R.dimen.top_fragment_height));
    draggableVideoPanel.setTopFragmentMarginRight(
            activity.getResources().getDimensionPixelSize(R.dimen.top_fragment_margin));
    draggableVideoPanel.setTopFragmentMarginBottom(
            activity.getResources().getDimensionPixelSize(R.dimen.top_fragment_margin));


    draggableVideoPanel.initializeView();
    draggableVideoPanel.maximize();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        iv.setTransitionName(transitionName);
        draggableVideoPanel.mCoverView.setTransitionName(transitionName);


        Transition shared = t.inflateTransition(android.R.transition.move);
        shared.addTarget(transitionName);
        shared.setDuration(200);

        Transition fade = t.inflateTransition(android.R.transition.fade);
        fade.excludeTarget(transitionName, true);
        fade.setDuration(200);

        TransitionSet transitionSet = new TransitionSet();

        transitionSet.addTransition(fade).addTransition(shared);

        Scene scene = new Scene(container, draggableVideoPanel);
        draggableVideoPanel.mCoverView.setImageResource(R.drawable.img);

        TransitionManager.go(scene, transitionSet);
    }

}

所以我从两个共享视图创建一个移动过渡,然后为其余视图创建一个淡入淡出。我从here

获取的这段代码

现在没有过渡,DraggablePanel曾经工作得很好,但是现在通过使用Transitions我得到了这个:

http://i.imgur.com/2aPxDJX.mp4

所以看起来转换创建了一个白色背景。使用布局检查器我发现实际上在应用转换时窗口中的所有元素都已从场景中删除。

我该怎样防止这种情况?如何在我的应用中的视图之间进行转换?

1 个答案:

答案 0 :(得分:0)

Scene scene = new Scene(container, draggableVideoPanel);

您正在使用此构造函数:Scene (ViewGroup sceneRoot, View layout)

  

构造一个场景,当输入时,将从sceneRoot 容器中删除所有子项,并将布局对象添加为该容器的新子项。

正如文档中所述,此Scene会导致删除container中除draggableVideoPanel以外的所有内容。

你想要的是TransitionManager.beginDelayedTransition(ViewGroup sceneRoot, Transition transition)