判断一个事件是传给viewgroup1还是2,比如1是横向滑动,2是竖直滑动的话,通过ViewConfiguration.get(context).getScaledTouchSlop();来判断,横向距离大于此变量,并且纵向距离小于此距离才能判定问横向滑动;不然的话,依靠手的一般的竖直滑动,稍微快一点就会使变动距离大于上面的变量,从而时子view的竖直监听接收不到事件,导致横向滑动不了多少(dx较小),纵向也捕获不了滑动事件,具体代码如下:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
switch(ev.getAction()){
case MotionEvent.ACTION_DOWN:
lastX = (int)ev.getX();
lastY = (int)ev.getY();
Log.i(TAG, "ACTION_DOWN: "+ lastX);
break;
case MotionEvent.ACTION_MOVE:
int currentX = (int)ev.getX();
int currentY = (int)ev.getY();
int diffX = lastX - currentX;
int diffY = lastY - currentY;
diffX = Math.abs(diffX);
diffY = Math.abs(diffY);
Log.i(TAG, "ACTION_MOVE: "+ diffX);
/*****
* 必须加一个竖直判断,因为上下滑动的平率很容易让x之间的距离大于设定的距离,
* 所以,缓慢上下滑动还能够在scrollView组件里面滑动,速度稍微快一点就转到
* viewgroup的左右滑动当中去了
*/
if(diffX > mTouchSlip && diffY < mTouchSlip){ //
return true;
}
break;
case MotionEvent.ACTION_UP:
Log.i(TAG, "ACTION_UP: ");
break;
}
return super.onInterceptTouchEvent(ev);
}