在android应用程序中有一个recyclerview,当用户转到我试过的其他片段时,我想要共享元素事务,如下所述。
行xml文件中的图片视图
<ImageView
android:id="@+id/iv_album_thumbnail"
android:layout_width="match_parent"
android:layout_height="160dip"
android:layout_gravity="center"
android:transitionName="image_transit"
android:scaleType="centerCrop"
tools:ignore="ContentDescription"
android:src="@drawable/img_default"
android:gravity="center" />
第二张片段中的图片视图
<ImageView
android:id='@+id/iv_album_thumbnail'
android:layout_width="wrap_content"
android:layout_centerHorizontal="true"
android:layout_height="wrap_content"
android:transitionName="image_transit"
tools:ignore="ContentDescription,UnusedAttribute"
android:layout_marginTop="60dip"
android:layout_alignParentTop="true"
android:src="@drawable/placeholder" />
点击方法
public void onAlbumClicked(RecyclerViewAdapter.ViewHolder holder, int position) {
SongListFragment kittenDetails = SongListFragment.newInstance(aList.get(position));
// Note that we need the API version check here because the actual transition classes (e.g. Fade)
// are not in the support library and are only available in API 21+. The methods we are calling on the Fragment
// ARE available in the support library (though they don't do anything on API < 21)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
kittenDetails.setSharedElementEnterTransition(new DetailsTransition());
kittenDetails.setEnterTransition(new Fade());
setExitTransition(new Fade());
kittenDetails.setSharedElementReturnTransition(new DetailsTransition());
}
getActivity().getSupportFragmentManager()
.beginTransaction()
.addSharedElement(holder.imgPicture, "image_transit")
.setCustomAnimations(R.anim.fade_in, R.anim.fade_out)
.replace(R.id.root, kittenDetails)
.addToBackStack(null)
.commit();
}
当recyclerview
中只有一个项目时它完美无缺,但当recyclerview
中有多个项目完全没有效果时,有人可以请我加油。
答案 0 :(得分:1)
我认为问题在于您在源视图树中有多个具有相同转换名称的视图。
您应该只在点击的行上设置它:
android:transitionName
属性。ViewCompat.SetTransitionName(holder.imgPicture, "image_transit");