替换视图之间的共享元素过渡

3
我有一个视图,使用removeView() 方法将其删除,然后使用addView() 方法添加另一个视图来替换它。这两个视图都在FrameLayout中。我想在这些布局中的两个共享图像之间进行共享元素过渡,但不知道如何做到这一点,因为Android工具似乎是建立在(也许是合理的)在activity或fragment之间进行共享元素过渡的基础上。
目前我最好的想法是尝试自己实现动画。我会通过在viewOverlay中绘制图像的副本,删除第一个视图,添加第二个视图并对其进行可见性动画处理,以使其到达第二个视图的位置,然后使第二个视图可见。如果这种方法有效,我将尽快回答自己的问题,但我希望能找到更本地的方法来解决这个问题。
1个回答

5
我的尝试制作自己的动画的想法显然是错误的路线(尽管它确实起作用了)。我发现,在某些方面,如果您有被替换的视图,则共享内容实际上更容易。大多数文档都围绕在活动和片段中使用转换,但它们的核心实际上是围绕着更改视图构建的。
这篇文章http://blog.stylingandroid.com/transition-animation-part-1/ 对我很有帮助。
本质上,我正在做的是:
            // 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允许多种方式来完成转换的每个步骤,因此如果这不完全符合您的用例,则有很多选项。
同时感谢Shared Element Transitions Between Views (not Activities or Fragments)提供的帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接