Android - Recyclerview共享元素转换项目位置

Ist*_*gar 14 android-fragments shared-element-transition android-recyclerview

我希望你能帮我解决这个问题.我有两个片段,第一个是带有几个图像的recyclerview,第二个片段是这个图像的详细视图.如果用户单击图像,则应用程序执行片段事务并显示详细信息.

我已成功实现片段之间的共享元素转换,如果我单击第一个片段上的小图像,它会变大,并移动到细节视图上的最终位置.

那么,这就是问题,图像的初始位置不是预期的,它开始从原始位置移动几个像素,当我点击图像向右和向下跳跃一点点.

为什么会这样?它很烦人!

转换xml:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <changeTransform />
    <changeBounds />
</transitionSet>
Run Code Online (Sandbox Code Playgroud)

如果我对Recyclerview以外的按钮执行相同操作,则可以完美运行.这是Recyclerview中的某种错误吗?

Seb*_*gel 15

您的RecyclerView项目需要在其共享视图上设置唯一的转换名称.如果您想象RecyclerView的渲染布局层次结构,其中将有许多具有相同转换名称的项目(视图).这种方式不清楚转换,实际的共享元素是什么.例如,您可以将位置附加到视图转换名称,例如transition1,transition2等.现在,当您启动详细信息片段时,必须将转换名称移交给它,并将此名称设置为详细信息中的共享视图片段,例如在onViewCreated()中.


Unc*_*ion 5

如果未从回收站视图中拾取正确的视图,则可能会发生这种情况.确保使用精确视图(基于位置)而不是根视图.例如,在下面的代码片段中,应使用View v(您在onClick()中收到的):

mAdapter.setOnItemClickListener(

                new MyAdapter.OnItemClickListener() {

                    @Override
                    public void onClick(View v, int position) {

                        ImageView heroView;
                        heroView = (ImageView) v.findViewById(R.id.category_icon);
                        ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
                                getActivity(), heroView, heroView.getTransitionName());
                        ActivityCompat.startActivity(getActivity(), intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)


Ale*_*ood 2

如果您的共享元素是s,那么您还ImageView需要使用转换。ChangeImageTransform尝试添加<changeImageTransform />到您的过渡集。

  • 感谢您的帮助,但我已经尝试了很多过渡组合,但结果仍然相同。 (2认同)