У меня есть RecyclerView. Я хочу прокрутить его как ViewPager с TabLayout и вкладками (я сделал это). Я НЕ хочу прокручивать его пальцами, носом, локтями или другими пальцами моего или другого пользователя. Но я хочу, чтобы пользователь или я могли использовать одни и те же пальцы, носы или локти для взаимодействия с itemView или viewHolder этого RecyclerView. К LinearLayoutManager прикреплен горизонтальный RecyclerView, а внутри каждого из ScrollView есть itemView вертикальной ориентации. Я хочу, чтобы пользователь мог прокручивать ScrollView по вертикали, но если его палец по какой-то причине перемещается влево или вправо, прокрутка RecyclerView не должна реагировать.
Я могу добавить переопределение метода canScrollHorizontally из LayoutManager, но оно вообще нарушает горизонтальную прокрутку - даже я выбираю вкладки.
Я могу добавить перехватывающий сенсорный прослушиватель в дочерние элементы ресайклера, который будет вызывать recycler.requestDisallowInterceptTouchEvent(true), но он работает, пока ребенок может прокручивать, как только он не может (палец идет влево или вправо), касание переходит к RecyclerView, и я получаю горизонтальную прокрутку.
Как сделать RecyclerView полностью «прозрачным» для касания?
Я нашел простой способ - переопределить onInterceptTouchEvent
public class TouchTransparentRecyclerView extends RecyclerView {
public TouchTransparentRecyclerView(Context context) {
super(context);
}
public TouchTransparentRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TouchTransparentRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
View childViewUnder = findChildViewUnder(e.getX(), e.getY());
if (childViewUnder instanceof ViewGroup)
return ((ViewGroup) childViewUnder).onInterceptTouchEvent(e);
else
return super.onInterceptTouchEvent(e);
}
}