在具有共享元素的片段上输入转换,目标是共享元素

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (12)

我正在使用新的LollipoAPIsetEnterTransition然后为片段中的图像添加共享元素转换。所需的行为首先是,图像应该移动到它的位置,然后片段中的其他视图应该消失。

但是,enterTransition正在应用于共享元素,因此它与其他视图一起逐渐消失。如果我没有设置换位,那么图像移动正常,但它在移动时,其他内容已经可见。

如何使它不应用到共享视图中?

下面是示例代码:

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;
  }
}
提问于
用户回答回答于

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

<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。如果它检测到父元素发生了更改,它将从父元素中提取共享元素,并分别转换它。

扫码关注云+社区