android事件分发机制

来源:互联网 发布:战地2小队数据 编辑:程序博客网 时间:2024/06/03 18:42

判断一个事件是传给viewgroup1还是2,比如1是横向滑动,2是竖直滑动的话,通过ViewConfiguration.get(context).getScaledTouchSlop();来判断,横向距离大于此变量,并且纵向距离小于此距离才能判定问横向滑动;不然的话,依靠手的一般的竖直滑动,稍微快一点就会使变动距离大于上面的变量,从而时子view的竖直监听接收不到事件,导致横向滑动不了多少(dx较小),纵向也捕获不了滑动事件,具体代码如下:

@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {// TODO Auto-generated method stubswitch(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);}


0 0
原创粉丝点击