Прокрутите RecyclerView с LongClickListener, назначенным ImageView - PullRequest
0 голосов
/ 03 августа 2020

Я хочу прокрутить RecyclerView с 2 или 3 элементами / сек. c при setOnLongClickListener при просмотре изображения. Я много искал и пробовал таймер обратного отсчета и обработчик для прокрутки RecyclerView, указав время c. но безуспешно. любая ИДЕЯ, как этого добиться.

Я пробовал это:

    private Runnable runnable = new Runnable() {
    @Override
    public void run() {

        if (minutesCurrentPosition >= 0 && minutesCurrentPosition < minutesArray.length) {

            minutesCurrentPosition++;

            if (minutesCurrentPosition == minutesArray.length) {
                minutesCurrentPosition--;
            }

            if (minutesCurrentPosition < minutesArray.length) {
                rvMinutes.scrollToPosition(minutesCurrentPosition);
            }
        }
    }

}; 

   ivMinutesUp.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            handler.postDelayed(runnable,500);
            return false;
        }
    });


        ivMinutesUp.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            handler.postDelayed(runnable,500);
            return false;
        }
    });


            ivMinutesUp.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View pView, MotionEvent pEvent) {

            // We're only interested in when the button is released.
            if (pEvent.getAction() == MotionEvent.ACTION_DOWN) {
                // handler.postDelayed(runnable,300);
            }

            switch (pEvent.getAction()) {
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                    handler.removeCallbacks(runnable);
                    break;
            }
            pView.onTouchEvent(pEvent);
            return false;
        }

    });

1 Ответ

0 голосов
/ 06 августа 2020

Я использовал это:

private void hoursGoUpFast() {
    isButtonReleased = false;
    if (thread != null) {
        thread.interrupt();
        thread = null;
    }

    thread = new Thread(new Runnable() {
        @Override
        public void run() {

            for (int i = 0; i < hoursArray.length; i++) {

                if (isButtonReleased) {
                    break;
                } else {

                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    nextHour();

                }

            }

        }
    });
    thread.start();

}

private void hoursGoDownFast() {
    isButtonReleased = false;
    if (thread != null) {
        thread.interrupt();
        thread = null;
    }

    thread = new Thread(new Runnable() {
        @Override
        public void run() {

            for (int i = 0; i < hoursArray.length; i++) {

                if (isButtonReleased) {
                    break;
                } else {

                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    previousHour();

                }

            }

        }
    });
    thread.start();

}

по клику:

        // hours long click
    ivHoursUp.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {

            hoursGoUpFast();
            // handler.postDelayed(runnable, 500);
            return false;
        }
    });

    ivHoursDown.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {

            hoursGoDownFast();
            // handler.postDelayed(runnable, 500);
            return false;
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...