如何实现前Lollipop的片段共享元素?

时间:2016-07-23 05:48:29

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

我在包含图像的片段中有一个回收者视图。我实现OnImageCLickListener,单击图像后,将打开一个全屏对话框片段并显示图像。现在我想在回收器视图中的图像和对话框片段中我的图像的全屏对话框之间实现共享元素转换,我还希望共享元素支持前Lollipop。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

首先,你必须获得点击的imageView的确切位置将其传递给片段: 要获得职位,你可以使用:

 int[] location = {0,0};
 mImageView.getLocationOnScreen(location);

并将其传递给您的片段,您可以使用:

Bundle bundle = new Bundle();
bundle.putInt("locationX",location[0]);
bundle.putInt("locationY",location[1]);

然后通过它获取它的片段:

locationX = getArguments().getInt("locationX");
locationY = getArguments().getInt("locationY");

注意:要获得该位置,请不要使用view.getTop(),view.getRight()等方法。 现在,您需要在片段OnCreateView中使用这样的简单动画:

float factor = ((float) (Utils.getWidth(getActivity())) / ((float) (pictureWidth)));

    viewPager.getLayoutParams().height = pictureHeight;
    viewPager.getLayoutParams().width = pictureWidth;
    viewPager.setTranslationY(locationY);
    viewPager.setTranslationX(locationX);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
        viewPager.animate()
                .translationY(Utils.getHeight(getActivity()) / 2 - pictureHeight / 2)
                .scaleX(factor)
                .scaleY(factor)
                .translationX(Utils.getWidth(getActivity()) / 2 - pictureWidth / 2);}

它也支持pre-Lollipop。