У меня есть 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, он начинает слегка колебаться, и пользователь может свободно перемещать свои пальцы, даже вне области просмотра определенного элемента,когда пульсация останавливается, только когда их палец поднят.