有个onInterceptTouchEvent()函数,
return false,表示不拦截touch事件,
return true,表示拦截。
拦截后,Touch事件会在本层的Ontouch()函数里面处理,
而不会传个上一层。
代码:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
//侧边栏打开时,拦截touch事件
<span style="color:#ff0000;">if(isOpen==false) return false;
else {
Log.e("SlidingMenu_qq","touch拦截成功");
return true;
}</span>
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(isOpen==false)
return true;
createVelocityTracker(ev);
int action = ev.getAction();
//鼠标x位置
xDown = ev.getRawX();
// 隐藏在左边的宽度
int scrollX = getScrollX();
int xSpeed = getScrollVelocity();
System.out.println("scrollX:=" + scrollX + "," + "speedX:=" + xSpeed
+ "," + "Menuwidth:=" + mMenuWidth);
switch (action) {
case MotionEvent.ACTION_UP:
<span style="color:#ff0000;">if(xDown>mMenuWidth){
this.smoothScrollTo(mMenuWidth, 0);
isOpen = false;
return true;
}</span>else
if (xSpeed <-200) {
this.smoothScrollTo(mMenuWidth, 0);
isOpen = false;
return true;
} else if (xSpeed >200) {
this.smoothScrollTo(0, 0);
isOpen = true;
return true;
} else if (scrollX >= mMenuWidth / 2) {
this.smoothScrollTo(mMenuWidth, 0);
isOpen = false;
return true;
} else {
this.smoothScrollTo(0, 0);
isOpen = true;
return true;
}
}
return super.onTouchEvent(ev);
}
参考内容:
Android onTouchEvent, onClick及onLongClick的调用机制:
http://blog.csdn.net/ddna/article/details/5451722
onInterceptTouchEvent和onTouchEvent调用时序:
http://blog.csdn.net/ddna/article/details/5473293