我试图将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用于过渡到使用过渡,我得到这个工作得很好,但现在:
http://i.imgur.com/2aPxDJX.mp4
所以它看起来像某种方式产生的过渡白色背景。使用布局检查器时,我发现在应用转换时,实际上窗口中的所有元素实际上都从场景中移除。
我该如何预防?我应该如何在视图间切换?
但我可以做这个共享元素转换吗?刚刚尝试,但它没有工作 –
是的,你可以。在代码中执行'TransitionManager.beginDelayedTransition(viewGroup,transition);'在该行的下面执行您想要重新定位的布局的变化,例如; 'draggableVideoPanel.setX(0);'。 'Transitions API'会计算delta值并应用'transition'。请注意,'draggableVideoPanel'应该是'viewGroup'的子项。 – azizbekian
你是对的它确实工作,但由于某种原因,转换没有按预期工作https://www.youtube.com/watch?v=vM__d-4xFv8&feature=youtu.be –