Android 处理滑动冲突的时候遇到的问题Invalid pointerId=-1 in onTouchEvent
在处理嵌套的View的滑动冲突的时候。重写了,父容器的onInterceptTouchEvent 之后, return 的值被我人为的限定成(true false),并没有调用super.onInterceptTouchEvent。这时,如果条件满足拦截下了Touch事件,就会进入父容器的onTouchEvent。在该方法最后的返回值为:super.onTouchEvent(ev);意味着,返回值
·
在处理嵌套的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 range
at android.view.MotionEvent.nativeGetAxisValue(Native Method)
at android.view.MotionEvent.getX(MotionEvent.java:2148)
pointerIndex out of range
pointerIndex 不在合理范围之内,是因为其值为-1。
只需要在父容器的onInterceptTouchEvent方法里面调用super.onInterceptTouchEvent(ev);方法就可以解决这个问题
更多推荐
已为社区贡献1条内容
所有评论(0)