在具有共享元素的片段上input转换将以共享元素为目标

我正在使用新的Lollipop api对setEnterTransition上的setEnterTransition ,然后为片段中的图像添加共享元素转换。 所需的行为是首先,图像应该移动到其位置,之后片段中的其余视图应该淡入。

但是,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; } } 

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

 <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。 如果检测到父对象发生更改,则会从父对象中抽取共享元素并分别进行转换。