Android 替换视图之间的共享元素转换
我有一个用removeView()删除的视图,然后有一个用addView()替换的视图。这两个视图都位于FrameLayout中。我希望能够在这些布局中的两个共享图像之间进行共享元素转换,但我真的不知道如何进行转换,因为android工具似乎是基于这样一个(可能是合理的)想法构建的,即您将只在活动或片段之间进行共享元素转换Android 替换视图之间的共享元素转换,android,android-layout,android-animation,android-view,android-transitions,Android,Android Layout,Android Animation,Android View,Android Transitions,我有一个用removeView()删除的视图,然后有一个用addView()替换的视图。这两个视图都位于FrameLayout中。我希望能够在这些布局中的两个共享图像之间进行共享元素转换,但我真的不知道如何进行转换,因为android工具似乎是基于这样一个(可能是合理的)想法构建的,即您将只在活动或片段之间进行共享元素转换 目前我最好的想法是自己尝试制作动画。我会通过在viewOverlay上绘制一个图像副本,删除第一个视图,添加第二个可见视图,在第二个视图中的位置设置动画,然后使第二个视图可见
目前我最好的想法是自己尝试制作动画。我会通过在viewOverlay上绘制一个图像副本,删除第一个视图,添加第二个可见视图,在第二个视图中的位置设置动画,然后使第二个视图可见。我将尝试这条路线,并回答我自己的问题,如果它可行的话,但我希望找到一种更自然的方式来实现这一点。我尝试自己制作动画的想法肯定是错误的(尽管它确实可行)。我发现,在某些方面,如果您有被替换的视图,共享内容实际上更容易。大多数文档都是围绕着使用带有活动和片段的转换而编写的,但它们的核心实际上是围绕更改视图而构建的 这篇文章对我帮助很大 基本上,我正在做的是:
// above I've gotten the sharedElements (Views)...
newSharedElement.setTransitionName("sharedProperty");
oldSharedElement.setTransitionName("sharedProperty");
// having android:transitionName in the xml can be easier
// This transition handles the shared element move based on the shared tansition name
Transition shared = TransitionInflater.from(context).inflateTransition(android.R.transition.move);
shared.addTarget(newSharedElement);
// create a scene container is a parentView (FrameLayout) of both children
Scene scene = new Scene(container, newChild);
// everything else is set to Fade, shared element is excluded
Transition fade = TransitionInflater.from(context).inflateTransition(android.R.transition.fade);
fade.excludeTarget(newSharedElement, true);
// combine the translations
TransitionSet set = new TransitionSet();
set.addTransition(shared).addTransition(fade);
// translationize
TransitionManager.go(scene, set);
Android允许很多方法来完成转换的每一步,所以如果这不适合您的用例,那么有很多选择
感谢,也感谢你的帮助