Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 替换视图之间的共享元素转换_Android_Android Layout_Android Animation_Android View_Android Transitions - Fatal编程技术网

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上绘制一个图像副本,删除第一个视图,添加第二个可见视图,在第二个视图中的位置设置动画,然后使第二个视图可见

我有一个用removeView()删除的视图,然后有一个用addView()替换的视图。这两个视图都位于FrameLayout中。我希望能够在这些布局中的两个共享图像之间进行共享元素转换,但我真的不知道如何进行转换,因为android工具似乎是基于这样一个(可能是合理的)想法构建的,即您将只在活动或片段之间进行共享元素转换


目前我最好的想法是自己尝试制作动画。我会通过在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允许很多方法来完成转换的每一步,所以如果这不适合您的用例,那么有很多选择

感谢,也感谢你的帮助