Заставить ImageView появляться при длительном нажатии RecyclerView и исчезать при отпускании? - PullRequest
0 голосов
/ 09 сентября 2018

Я хотел бы создать RecyclerView, в котором пользователь может долго щелкать изображение и предварительно просматривать полноразмерное изображение, пока не отпустит длинный щелчок.

У меня это в основном работает, но проблема у меня заключается в том, что если я начну длинный щелчок, а затем проведу пальцем (удерживая нажатой кнопку), слушатель больше не будет ждать моего события ACTION_UP и предварительного просмотра изображение никогда не уходит. Можно ли как-то игнорировать перетаскивание / прокрутку, чтобы мой вид предварительного просмотра исчезал, когда я отпускаю длинный щелчок?

Вот что у меня есть для слушателей событий:

       /* Long press will trigger hover previewer */
        holder.thumbnailImageView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View pView) {

                holder.thumbnailImageView.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View pView, MotionEvent pEvent) {
                        pView.onTouchEvent(pEvent);
                        // We're only interested in when the button is released.
                        if (pEvent.getAction() == MotionEvent.ACTION_UP) {
                            if (isImageViewPressed) {
                                // Do something when the button is released.
                                isImageViewPressed = false;
                                mHoverView.setVisibility(View.GONE);
                            }
                        }                                                 
                        return false;
                    }
                });

                isImageViewPressed = true;
                GlideApp.load(item.getUrl()).into(mHoverView);
                mHoverView.setVisibility(View.VISIBLE);
                return true;
            }
        });

1 Ответ

0 голосов
/ 19 декабря 2018
/* Long press will trigger hover previewer */
        holder.thumbnailImageView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View pView) {
                isImageViewPressed = true;
                GlideApp.load(item.getUrl()).into(mHoverView);
                mHoverView.setVisibility(View.VISIBLE);
                return true;
            }
        });

       holder.thumbnailImageView.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View pView, MotionEvent pEvent) {
                        pView.onTouchEvent(pEvent);
                        // We're only interested in when the button is released.
                        if (isImageViewPressed && pEvent.getAction() == MotionEvent.ACTION_UP) {
                                // Do something when the button is released.
                                isImageViewPressed = false;
                                mHoverView.setVisibility(View.GONE);
                        }                                                 
                        return true;
                    }
                });

Это будет работать , и ваш код не работает, так как longClickListener не получает событие сбоя (и ни одного действия), и то, что вы делаете в настоящее время, это настройка слушателя на касание , который никогда не получал Action_DOWN т.е. по умолчанию ontouch () View возвращает false на Action_Down, поэтому вам нужно переопределить и вернуть true до вызова action down, чтобы он получил действие get двигаться и действовать вверх и т.д.

...