【问题标题】:Shared element transition between replaced views替换视图之间的共享元素转换
【发布时间】:2015-08-10 03:36:03
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    这个帖子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),也可寻求帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 2019-01-20
      • 2017-01-12
      • 1970-01-01
      相关资源
      最近更新 更多