Android: как избежать ряби на утилите - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть ConstraintsLayout, который надувается в моем адаптере, который расширяет RecyclerView.Adapter<RecyclerView.ViewHolder>.Я устанавливаю onLongClickListener, чтобы запустить волновой эффект.Я использую простую библиотеку RippleBackground, найденную здесь .

Моя проблема заключается в том, что пульсация начинает работать после запуска длинного нажатия, но через несколько секунд либо перейдет к другим элементам вrecyclerView, или исчезните, прежде чем я этого захочу (когда я заканчиваю долгое нажатие).

Когда в представлении переработчика есть только 1 элемент, он работает нормально.Но в противном случае он ломается и выполняет упомянутое поведение.

Я пытался вызвать itemView.stopNestedScroll в моем ItemViewHolder внутри адаптера, но это не сработало.

Ниже мои слушатели, которыеЯ настраиваюсь.

private View.OnClickListener onClickListener = ignored ->
        listener.onRowClicked(getAdapterPosition());

private View.OnLongClickListener onLongClickListener = ignored -> {
        rippleBackground.startRippleAnimation();
        itemView.getParent().requestDisallowInterceptTouchEvent(true);
        return true;
    };

//Listener just to check if finger is lifted after longPress
//since user should be able to move finger anywhere on screen and not cancel ripple until finger is lifted.
private View.OnTouchListener onTouchListener = (view, motionEvent) -> {
   if (rippleBackground.isRippleAnimationRunning() && motionEvent.getAction() == MotionEvent.ACTION_UP) {
          rippleBackground.stopRippleAnimation();
        }
          return false;
    };

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

...