要拦截 ViewPager2 中的触摸事件,可以通过自定义一个继承自 ViewPager2 的类,并重写它的 dispatchTouchEvent() 方法来实现。
下面是一个示例代码:
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewpager2.widget.ViewPager2;
public class InterceptViewPager2 extends ViewPager2 {
private boolean isInterceptTouchEvent = false;
public InterceptViewPager2(@NonNull Context context) {
super(context);
}
public InterceptViewPager2(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (isInterceptTouchEvent) {
return super.dispatchTouchEvent(ev);
} else {
return false;
}
}
public void setInterceptTouchEvent(boolean interceptTouchEvent) {
isInterceptTouchEvent = interceptTouchEvent;
}
}
在上面的代码中,我们创建了一个名为 InterceptViewPager2 的类,它继承自 ViewPager2。我们添加了一个名为 isInterceptTouchEvent 的标志位,用来控制是否拦截触摸事件。当 isInterceptTouchEvent 为 true 时,ViewPager2 将正常处理触摸事件;当 isInterceptTouchEvent 为 false 时,ViewPager2 将不处理触摸事件,相当于拦截了触摸事件。
使用这个自定义的 InterceptViewPager2,只需要将原来的 ViewPager2 替换为 InterceptViewPager2,并通过 setInterceptTouchEvent() 方法来控制是否拦截触摸事件。
下面是一个使用示例:
InterceptViewPager2 viewPager = findViewById(R.id.viewPager);
viewPager.setInterceptTouchEvent(true); // 设置拦截触摸事件
在上面的代码中,我们首先找到 InterceptViewPager2 的实例,并调用 setInterceptTouchEvent() 方法来设置是否拦截触摸事件。