首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在带有共享元素的片段上输入过渡指向该共享元素

在带有共享元素的片段上输入过渡指向该共享元素
EN

Stack Overflow用户
提问于 2014-11-13 09:23:20
回答 1查看 10.2K关注 0票数 21

我使用新的棒棒糖api在片段上执行setEnterTransition,然后为片段中的图像添加一个共享元素过渡。所需的行为是,首先,图像应该移动到它的位置,然后片段中的其余视图应该淡入。

但是,enterTransition被应用于共享元素,因此它与其他视图一起淡入。如果我没有设置enterTransition,那么图像会正确地移动,但它在移动其他内容时是可见的。

如何使其不将enterTransition应用于共享视图?

我发现this commit in the AOSP似乎应该解决这个问题,但它似乎不起作用。

以下是示例代码:

代码语言:javascript
复制
public class Fragment1 extends Fragment {

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.main_fragment, container, false);
    final ImageView imageView = (ImageView) rootView.findViewById(R.id.image);
    final Button button = (Button) rootView.findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        TransitionSet transitionSet = new TransitionSet();
        transitionSet.addTransition(new ChangeImageTransform());
        transitionSet.addTransition(new ChangeBounds());
        transitionSet.setDuration(300);

        Fragment fragment2 = new Fragment2();
        fragment2.setSharedElementEnterTransition(transitionSet);
        fragment2.setSharedElementReturnTransition(transitionSet);
        Fade fade = new Fade();
        fade.setStartDelay(300);
        fragment2.setEnterTransition(fade);

        getFragmentManager().beginTransaction()
            .replace(R.id.container, fragment2)
            .addSharedElement(imageView, "SharedImage")
            .commit();
      }
    });
    return rootView;
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-14 06:03:50

enter转换不应应用共享元素视图。最有可能的情况是,您的共享元素位于另一个具有背景的视图中,从而使该视图受到enter转换的影响。这就是这样的情况:

代码语言:javascript
复制
<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#FFF"
    >
    <ImageView android:src="@drawable/pretty_picture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:transitionName="picture"
        android:padding="20dp"/>
</FrameLayout>

在这里,ImageView是共享元素。

如果发生这种情况,您将需要添加一个神奇的转换: ChangeTransform。如果它检测到父元素发生变化,它将从父元素中取出共享元素,并单独转换它。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26899779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档