Pergunta

I am working through debugging some touch handling stuff on Android, and am trying to figure out why the MotionEvent sent to my View's onTouchListener contains a cancel action. I have not been able to find any documentation on its cause, and was hoping someone could point me in the right direction for debugging this problem - error codes, source code, or some general knowledge.

Foi útil?

Solução

Is this what you are looking for:

"ACTION_CANCEL occurs when the parent takes possession of the motion, for example when the user has dragged enough across a list view that it will start scrolling instead of letting you press the buttons inside of it. You can find out more about it at the viewgroup documentation: onInterceptTouchEvent."

Hope that is the answer you are looking for:

Resources: Motion Event, Stack Overflow.

Outras dicas

All you need is to call

requestDisallowInterceptTouchEvent(true);

on the parent view, like this -

        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            view.getParent().requestDisallowInterceptTouchEvent(true);
            switch(motionEvent.getActio){
            }

            return false; 

         }

Source: onInterceptTouchEvent, onTouchEvent only see ACTION_DOWN

ACTION_CANCEL is triggered by ancestor to notify all descendants that they lost onTouch control and it's will be responsible for handling the next onTouch event. Usually it is caused when a descendant returned true in onTouch or onTouchEvent method but after that, during the next of touch event of gesture, an ancestor returned true in onInterceptTouchEvent()

[Touch event flow]

When the drag moves out of view rect, you get ACTION_CANCEL

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top