Android OnTouchEvent:调试 InputEventConsistencyVerifier 消息

Posted

技术标签:

【中文标题】Android OnTouchEvent:调试 InputEventConsistencyVerifier 消息【英文标题】:Android OnTouchEvent: Debugging InputEventConsistencyVerifier messages 【发布时间】:2013-04-19 03:05:02 【问题描述】:

我有一个为OnTouchEvent() 配置了手势监听器的布局。布局包含一个列表视图,我正在使用手势来捕获列表视图的行 ID。 我有以下代码-

 itemsList.setOnTouchListener(new OnTouchListener() 

        @Override
        public boolean onTouch(View arg0, MotionEvent evt) 
            // TODO Auto-generated method stub
            //
            int action = evt.getAction();
            final String DEBUG_TAG = "DEBUG";
            detector.onTouchEvent(evt);
            switch(action) 
                case (MotionEvent.ACTION_DOWN) :
                    Log.d(DEBUG_TAG,"Action was DOWN");
                    return true;
                case (MotionEvent.ACTION_MOVE) :
                    Log.d(DEBUG_TAG,"Action was MOVE");
                    return true;
                case (MotionEvent.ACTION_UP) :
                    Log.d(DEBUG_TAG,"Action was UP");
                    return true;
                case (MotionEvent.ACTION_CANCEL) :
                    Log.d(DEBUG_TAG,"Action was CANCEL");
                    return true;
                case (MotionEvent.ACTION_OUTSIDE) :
                    Log.d(DEBUG_TAG,"Movement occurred outside bounds " +
                            "of current screen element");
                    return true;    
             

            return false;
        

    );

detector 是 GestureDetector 实例。我基本上只是在列表视图的一行上使用向左滑动或向右滑动动作。

每当我向左/向右滑动时,我都会在 Logcat 中收到 3 条调试消息 (信息或要查看的东西??)。

D/InputEventConsistencyVerifier(24700): TouchEvent: ACTION_MOVE contained 1 pointers 
but there are currently 0 pointers down.

D/InputEventConsistencyVerifier(24700):   in android.view.GestureDetector@b50cf9b0

D/InputEventConsistencyVerifier(23596):   0: sent at 37751425150760, 
MotionEvent  action=ACTION_MOVE, id[0]=0, x[0]=39.00721, y[0]=28.526703, toolType[0]=TOOL_TYPE_FINGER, 
buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=1, eventTime=37751425, 
downTime=37751133, deviceId=0, source=0x1002 

还有来自 OnTouchListener 的 4 条调试消息 -

Action was ACTION MOVE
Action was ACTION MOVE
Action was ACTION MOVE
Action was ACTION UP

这与我认为的滑动动作相对应。

主要活动类扩展了OnGestureListener,因此具有未实现的方法,例如onFling..等。

问题在于 onFling 方法仅在 ACTION UP 事件之后调用,并且当发生这种情况时,传递给方法 mevt1 的参数为空,而 mevt2 不为空。 (默认行为?)

onFling(MotionEvent mevt1, MotionEvent mevt2, float velX, float velY)

该方法使用 mevt1,因此会导致 nullpointexception。

我想知道来自InputEventConsistencyVerifier 的调试消息是否有任何问题,是否有人知道这是否有任何问题?

【问题讨论】:

【参考方案1】:

你必须打电话

detector.onTouchEvent(evt)

对于每个动作,而不仅仅是 ACTION_MOVE

【讨论】:

抱歉,我之前粘贴的代码来自我的调试会话。更新了新代码。运行此代码时,我的应用程序崩溃。我发现如果我也使用 onScroll() ,结果是一样的。即应用程序崩溃。 为什么你总是返回true?返回检测器的值 我不知道如何,但我从头开始编写了一些触摸事件代码,我不再收到错误,一切正常。我认为该错误可能是由于父视图或子视图(Listview 上下文)中的触摸事件处理不当造成的。 返回 'true' 是因为我不再希望触摸事件转到子视图。

以上是关于Android OnTouchEvent:调试 InputEventConsistencyVerifier 消息的主要内容,如果未能解决你的问题,请参考以下文章

Android Touch系统简介:实例详解onInterceptTouchEvent与onTouchEvent的调用过程

Android Touch系统简介:实例详解onInterceptTouchEvent与onTouchEvent的调用过程

Android中View的onTouchEvent和OnTouch区别

Android中onTouchEvent, onClick及onLongClick的调用机制

Android-onInterceptTouchEvent()和onTouchEvent()总结

Android的事件分发(dispatchTouchEvent),拦截(onInterceptTouchEvent)与处理(onTouchEvent)