I recently changed the ViewPager in my application to a ViewPager2. I had set an onTouchListener to the viewPager object to detect gestures (onFling and onLongPress), as such:
mViewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
mDetector.onTouchEvent(motionEvent); // use the custom gesture detector to detect onFling and onLongPress touch events.
return true;
}
});
The onTouchListener for the viewPager was working fine before the refactor to the ViewPager2. I tried this answer but it didn't work and could not find more info online.
How can we set an OnTouchListener
to the ViewPager2
?
Because ViewPager2 is a ViewGroup, the final target is the recyclerview in it. The setOnTouchListener is not called because the recyclerview intercepts the event and calls the onTouchEvent first.
The right way to add customised onTouch logic is to call
mViewPager.getChildAt(0).setOnTouchListener{...}