對(duì)于點(diǎn)擊事件是從父布局向子布局傳遞焕刮,對(duì)點(diǎn)擊事件的攔截是在父布局做攔截消費(fèi),不在傳遞給子布局控件消費(fèi),下面的例子是viewpager里對(duì)手指下滑的事件做攔截鼓寺,不在傳遞到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) {//如果當(dāng)前展示的是首頁(yè)勋磕,就對(duì)滑動(dòng)事件做攔截妈候,其他頁(yè)面不處理
if (HomeFragment.getHomeScrollHeight() == 0) {//首頁(yè)的recyclerView是到達(dá)頂部,對(duì)滑動(dòng)事件攔截挂滓,讓父控件消費(fèi)該滑動(dòng)
if (action == MotionEvent.ACTION_DOWN) {
downY = ev.getY();//手指按下的y軸坐標(biāo)
}
//由于監(jiān)聽不到手指抬起的動(dòng)作苦银,所以這里監(jiān)聽的是手指滑動(dòng)
if (action == MotionEvent.ACTION_MOVE) {
upY = ev.getY();//手指抬起的y軸坐標(biāo)
if (downY != upY) {
decY = downY - upY;
if (decY < 0) {//坐標(biāo)差小于0表示下滑
return true;//true表示對(duì)當(dāng)前事件做攔截,父控件不把該事件分發(fā)到子控件
}
}
}
}
}
return super.onInterceptTouchEvent(ev);
}
完結(jié)赶站。