Нажмите на изображение и откройте макет с такими действиями, как Instagram - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь реализовать предварительный просмотр изображения при нажатии, как в Instagram.

У моего приложения есть каталог, в котором содержатся изображения, в которых при нажатии на любое изображение его предварительный просмотр должен появляться и закрываться после публикации, как в Instagram, при проверке сетки на сообщения (вы можете иметь увеличенный макет элемента с комментариями и опцией «Сердце»). .

Проверьте Изображение 1 : Это будет список.

Проверьте Изображение 2 : Это то, что я хочу, нажав на элемент списка.

Я пытался добиться того же самого с помощью Увеличить изображение с помощью анимации масштабирования , но оно применимо к изображению, а не ко всему макету элемента.

1 Ответ

0 голосов
/ 03 мая 2018
public void show(Context context, ImageView source) {
        BitmapDrawable background = ImagePreviewerUtils.getBlurredScreenDrawable(context, source.getRootView());

        View dialogView = LayoutInflater.from(context).inflate(R.layout.view_image_previewer, null);
        ImageView imageView = (ImageView) dialogView.findViewById(R.id.previewer_image);

        Drawable copy = source.getDrawable().getConstantState().newDrawable();
        imageView.setImageDrawable(copy);

        final Dialog dialog = new Dialog(context, R.style.ImagePreviewerTheme);
        dialog.getWindow().setBackgroundDrawable(background);
        dialog.setContentView(dialogView);//You can set your custem view here
        dialog.show();

        source.setOnTouchListener(new View.OnTouchListener() {
            @Override public boolean onTouch(View v, MotionEvent event) {
                if (dialog.isShowing()) {
                    v.getParent().requestDisallowInterceptTouchEvent(true);
                    int action = event.getActionMasked();
                    if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
                        v.getParent().requestDisallowInterceptTouchEvent(false);
                        dialog.dismiss();
                        return true;
                    }
                }
                return false;
            }
        });
    }

Примечание. Измените вид содержимого диалога (макет) в соответствии с вашими потребностями

Используйте этот макет масштабирования с прозрачной диалоговой темой Макет масштабирования

...