Android 如何为pre Lollipop实现片段共享元素?

Android 如何为pre Lollipop实现片段共享元素?,android,android-fragments,shared-element-transition,Android,Android Fragments,Shared Element Transition,我在包含图像的片段中有一个recycler视图。我实现了OnImageCLickListener,在单击图像后,会打开一个全屏对话框片段并显示图像。现在我想在recycler视图中的图像和对话框片段中的图像的全屏对话框之间实现共享元素转换,我还希望共享元素支持pre-Lollipop 如何操作?首先,您必须获得单击的imageView的确切位置并将其传递给片段: 要获得位置,您可以使用以下命令: int[] location = {0,0}; mImageView.getLocationOn

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


如何操作?

首先,您必须获得单击的imageView的确切位置并将其传递给片段: 要获得位置,您可以使用以下命令:

 int[] location = {0,0};
 mImageView.getLocationOnScreen(location);
Bundle bundle = new Bundle();
bundle.putInt("locationX",location[0]);
bundle.putInt("locationY",location[1]);
要将其传递给您的片段,您可以使用以下命令:

 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()等方法。 现在,在fragment 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);}
它也支持预棒棒糖