在ViewPager中片段共享元素过渡动画

时间:2020-04-29 13:43:25

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

“我的主要活动”由一个顶部具有3个标签的标签布局和一个viewpager组成。

在那个viewpager中,我有3个不同的片段。

在其中一个片段中,我有一个包含多个项目的回收视图。

当我单击来自recyclerview项目的图像时,我将打开一个包含更多详细信息的新片段。

问题是共享元素之间的过渡动​​画不起作用。细节片段只是弹出而没有动画。

这是来自recyclerview适配器onBindViewHolder中的onclicklistener的代码:

holder.ivPost.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle bundle = new Bundle();
                holder.ivPost.setTransitionName("transition" + position);
                imageTransitionName = holder.ivPost.getTransitionName();

                bundle.putInt("postimage", modelFeed.getPostpic());
                bundle.putString("transitionName", imageTransitionName);

                Transition changeTransform = TransitionInflater.from(context).
                        inflateTransition(R.transition.change_image_transform);
                Transition noTransition = TransitionInflater.from(context).
                        inflateTransition(android.R.transition.no_transition);

                Fragment fragment1 = Activity_Feed.newInstance();

                fragment1.setSharedElementReturnTransition(changeTransform);
                fragment1.setExitTransition(noTransition);

                FragmentManager manager = ((AppCompatActivity)context).getSupportFragmentManager();
                FragmentTransaction transaction = manager.beginTransaction();

                Fragment fragment2 = Post.newInstance();
                fragment2.setSharedElementEnterTransition(changeTransform);
                fragment2.setEnterTransition(noTransition);
                fragment2.setArguments(bundle);

                transaction.addToBackStack(null).addSharedElement(holder.ivPost,imageTransitionName).replace(R.id.fram1, fragment2).commit();
            }

        });

R.id.fram1是第一个片段的框架布局ID。

在第二个片段中,我得到这样的参数:

        Bundle bundle = getArguments();

        String transitionName = bundle.getString("transitionName");
        int postimage = bundle.getInt("postimage");

        ImageView ivPost = v.findViewById(R.id.postimg);
        ivPost.setTransitionName(transitionName);
        ivPost.setImageResource(postimage);

谢谢您的帮助!

0 个答案:

没有答案