在包含共享元素的共享元素的片段上输入转换

Spe*_*cer 20 android android-fragments android-transitions android-5.0-lollipop

setEnterTransition在片段上使用新的Lollipop api ,然后为片段中的图像添加共享元素转换.首先,图像应移动到其位置,然后片段中的其余视图应淡入.

但是,enterTransition正在应用于共享元素,因此它将与其余视图一起淡入.如果我没有设置enterTransition,那么图像会正常移动,但是当它移动时,其他内容已经可见.

如何让它不将enterTransition应用于共享视图?

在AOSP中发现这个提交似乎应该解决这个问题,但它似乎没有起作用.

这是示例代码:

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

Geo*_*unt 25

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

<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>
Run Code Online (Sandbox Code Playgroud)

这里,ImageView是共享元素.

如果发生这种情况,您将需要添加魔术转换:ChangeTransform.如果它检测到父级更改,它将从父级中提取共享元素并单独转换它.

  • 乔治,我可以亲你!这解决了我的问题,我的视图始终从第二个片段中的屏幕顶部开始动画,而不是从它们在第一个片段中的位置开始.这是我的问题的链接(这很多评论)谢谢!http://stackoverflow.com/questions/26950801/shared-elements-animating-between-fragments (2认同)