当多个元素时,共享元素事务不与recyclelerview一起使用

时间:2016-12-23 11:13:18

标签: android android-fragments android-recyclerview shared-element-transition

在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中有多个项目完全没有效果时,有人可以请我加油。

1 个答案:

答案 0 :(得分:1)

我认为问题在于您在源视图树中有多个具有相同转换名称的视图。

您应该只在点击的行上设置它:

  • 从行xml中删除android:transitionName属性。
  • 添加ViewCompat.SetTransitionName(holder.imgPicture, "image_transit");