对于点击事件是从父布局向子布局传递,对点击事件的拦截是在父布局做拦截消费,不在传递给子布局控件消费,下面的例子是viewpager里对手指下滑的事件做拦截,不在传递到fragment中处理,代码如下:
float downY = 0;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = ev.getAction() & MotionEvent.ACTION_MASK;
int currentItem = super.getCurrentItem();
float upY;
float decY;
if (currentItem == 1) {//如果当前展示的是首页,就对滑动事件做拦截,其他页面不处理
if (HomeFragment.getHomeScrollHeight() == 0) {//首页的recyclerView是到达顶部,对滑动事件拦截,让父控件消费该滑动
if (action == MotionEvent.ACTION_DOWN) {
downY = ev.getY();//手指按下的y轴坐标
}
//由于监听不到手指抬起的动作,所以这里监听的是手指滑动
if (action == MotionEvent.ACTION_MOVE) {
upY = ev.getY();//手指抬起的y轴坐标
if (downY != upY) {
decY = downY - upY;
if (decY < 0) {//坐标差小于0表示下滑
return true;//true表示对当前事件做拦截,父控件不把该事件分发到子控件
}
}
}
}
}
return super.onInterceptTouchEvent(ev);
}
完结。