Android 处理滑动冲突的时候遇到的问题Invalid pointerId=-1 in onTouchEvent

来源:互联网 发布:程序员高效使用mac 编辑:程序博客网 时间:2024/06/05 00:35

在处理嵌套的View的滑动冲突的时候。

重写了,父容器的onInterceptTouchEvent 之后, return 的值被我人为的限定成(true false),并没有调用super.onInterceptTouchEvent。

这时,如果条件满足拦截下了Touch事件,就会进入父容器的onTouchEvent。

在该方法最后的返回值为:super.onTouchEvent(ev);

意味着,返回值是通过父类 的 onTouchEvent 计算得出的。

在父类的onTouchEvent 里面

case MotionEvent.ACTION_MOVE:/*这里必定会取出-1.原因是因为在down事件的时候,onInterceptTouchEvent没有对activePointerIndex 进行合理赋值。*/final int activePointerIndex = ev.findPointerIndex(mActivePointerId);if (activePointerIndex == -1) {Log.e(TAG, "Invalid pointerId=" + mActivePointerId + " in onTouchEvent");break;}Log.e(TAG,"Invalid pointerId="+ mActivePointerId +" in onTouchEvent");ndroid 4.4 就会输出这一句。Invalid pointerId=-1 in onTouchEvent而Android 4.4以下,很可能会输出:java.lang.IllegalArgumentException: pointerIndex out of rangeat android.view.MotionEvent.nativeGetAxisValue(Native Method)at android.view.MotionEvent.getX(MotionEvent.java:2148)pointerIndex out of rangepointerIndex 不在合理范围之内,是因为其值为-1

只需要在父容器的onInterceptTouchEvent方法里面调用super.onInterceptTouchEvent(ev);方法就可以解决这个问题

0 0
原创粉丝点击