android - 替换 View 之间的共享元素转换

标签 android android-layout android-animation android-view android-transitions

我有一个要使用 removeView() 删除的 View ,然后是一个用 addView() 替换它的 View 。这两个 View 都在 FrameLayout 中。我希望能够在这些布局中的两个共享图像之间进行共享元素转换,但我真的不知道如何去做,因为 android 工具似乎是用你会的(也许是合理的)想法构建的仅在 Activity 或 fragment 之间具有共享元素转换。

目前我最好的想法是自己尝试制作动画。我会通过将图像的副本绘制到 viewOverlay 上,删除第一个 View ,添加第二个可见的 View ,将其动画化到第二个 View 中的位置,然后使第二个 View 可见。我将尝试这条路线并回答我自己的问题,如果它有效,但我希望找到一种更原生的方式来做到这一点。

最佳答案

我尝试自己制作动画的想法绝对是错误的路线(尽管它确实有效)。我发现在某些方面,如果您有正在被替换的 View ,那么共享内容实际上会更容易。大多数文档都是围绕使用带有 Activity 和 fragment 的转换,但它们的核心实际上是围绕更改 View 构建的。

此帖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) ,也寻求帮助。

关于android - 替换 View 之间的共享元素转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31911278/

相关文章:

android - 最大化 ListView 中的可见行

java - 如何连续动画 Fab 按钮(放大/缩小)?

android - 过滤后 recyclerview 中的错误项目

android - 调整图层列表项中的可绘制大小

Android:如何在普通类(class)内获得给定 Activity 的 View ?

android - 使用 startOffset 的动画反转

android - 使用删除与隐藏时不调用自定义动画

java - 如何获取 MPAndroidChart 上的滚动偏移量?

android - 将 handler.post(new Runnable());在 Android 中创建新线程?

android - 如何列出自定义目录中的所有文件