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

我该怎么做?

最佳答案

首先,您必须获取单击的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);}


它还支持预棒棒糖。

关于android - 如何为预 Lollipop 实现 fragment 共享元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38538624/

10-10 01:52