您的位置:首页 > 其它

安卓触摸事件探究

2016-03-18 15:39 281 查看
参考,/article/3630211.html


/**
*第一步,dispatchTouchEvent,
*false:结束
*true:到onInterceptTouchEvent
*第二步:到onInterceptTouchEvent,
*true:到viewGroup的onTouchEvent
*false:到ViewdispatchTouchEvent
*第三步:ViewdispatchTouchEvent
*第四步:ViewonTouchEvent
*true:view消费touch事件,viewGroup不能消费
*false:viewGroup决定是否消费touch事件
*
*
*@paramev
*@return
*/


例子原型
MyLinearLayout包含一个MyView
情况一,


MyLinearLayout,
    dispatchTouchEvent返回false
    onInterceptTouchEvent返回false
    onTouchEvent返回false
MyView
    dispatchTouchEvent返回false  
    onTouchEvent返回false


结果


03-1815:26:00.7266884-6884/com.example.myappD/zyr﹕ADISACTION_DOWN
03-1815:26:00.7266884-6884/com.example.myappD/zyr﹕AINTACTION_DOWN
03-1815:26:00.7266884-6884/com.example.myappE/zyr﹕BDISACTION_DOWN
03-1815:26:00.7266884-6884/com.example.myappE/zyr﹕BTOUACTION_DOWN
03-1815:26:00.7266884-6884/com.example.myappD/zyr﹕ATOUACTION_DOWN
03-1815:26:05.3966884-6884/com.example.myappD/zyr﹕ADISACTION_DOWN
03-1815:26:05.3966884-6884/com.example.myappD/zyr﹕AINTACTION_DOWN
03-1815:26:05.3966884-6884/com.example.myappE/zyr﹕BDISACTION_DOWN
03-1815:26:05.3966884-6884/com.example.myappE/zyr﹕BTOUACTION_DOWN
03-1815:26:05.3966884-6884/com.example.myappD/zyr﹕ATOUACTION_DOWN


结论

由图,没有view消费本次触摸事件,Action_Move事件根本传递不进来


情况二,

MyLinearLayout,
    dispatchTouchEvent返回false
    onInterceptTouchEvent返回false
    onTouchEvent返回false
MyView
    dispatchTouchEvent返回false  
    onTouchEvent返回true


结果
03-1815:36:33.64110292-10292/com.example.myappD/zyr﹕ADISACTION_DOWN
03-1815:36:33.64110292-10292/com.example.myappD/zyr﹕AINTACTION_DOWN
03-1815:36:33.64110292-10292/com.example.myappE/zyr﹕BDISACTION_DOWN
03-1815:36:33.64110292-10292/com.example.myappE/zyr﹕BTOUACTION_DOWN
03-1815:36:33.67610292-10292/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1815:36:33.67610292-10292/com.example.myappD/zyr﹕AINTACTION_MOVE
03-1815:36:33.67610292-10292/com.example.myappE/zyr﹕BDISACTION_MOVE
03-1815:36:33.67610292-10292/com.example.myappE/zyr﹕BTOUACTION_MOVE
03-1815:36:33.69110292-10292/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1815:36:33.69110292-10292/com.example.myappD/zyr﹕AINTACTION_MOVE
03-1815:36:33.69110292-10292/com.example.myappE/zyr﹕BDISACTION_MOVE
03-1815:36:33.69110292-10292/com.example.myappE/zyr﹕BTOUACTION_MOVE
03-1815:36:33.71110292-10292/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1815:36:33.71110292-10292/com.example.myappD/zyr﹕AINTACTION_MOVE
03-1815:36:33.71110292-10292/com.example.myappE/zyr﹕BDISACTION_MOVE
03-1815:36:33.71110292-10292/com.example.myappE/zyr﹕BTOUACTION_MOVE
03-1815:36:33.72110292-10292/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1815:36:33.72110292-10292/com.example.myappD/zyr﹕AINTACTION_MOVE
03-1815:36:33.72110292-10292/com.example.myappE/zyr﹕BDISACTION_MOVE
03-1815:36:33.72110292-10292/com.example.myappE/zyr﹕BTOUACTION_MOVE
03-1815:36:33.72110292-10292/com.example.myappD/zyr﹕ADISACTION_UP
03-1815:36:33.72110292-10292/com.example.myappD/zyr﹕AINTACTION_UP
03-1815:36:33.72110292-10292/com.example.myappE/zyr﹕BDISACTION_UP
03-1815:36:33.72110292-10292/com.example.myappE/zyr﹕BTOUACTION_UP


结论

MyView消费ACTION_DOWN,之后ACTION_MOVE传递进来,消费ACTION_MOVE,ACTION_UP同理


情况三,

MyLinearLayout,
    dispatchTouchEvent返回false
    onInterceptTouchEvent返回false
    onTouchEvent返回true
MyView
    dispatchTouchEvent返回false  
    onTouchEvent返回true


结果
03-1815:40:18.05629163-29163/com.example.myappD/zyr﹕ADISACTION_DOWN
03-1815:40:18.05629163-29163/com.example.myappD/zyr﹕AINTACTION_DOWN
03-1815:40:18.05629163-29163/com.example.myappE/zyr﹕BDISACTION_DOWN
03-1815:40:18.05629163-29163/com.example.myappE/zyr﹕BTOUACTION_DOWN
03-1815:40:18.07629163-29163/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1815:40:18.07629163-29163/com.example.myappD/zyr﹕AINTACTION_MOVE
03-1815:40:18.07629163-29163/com.example.myappE/zyr﹕BDISACTION_MOVE
03-1815:40:18.07629163-29163/com.example.myappE/zyr﹕BTOUACTION_MOVE
03-1815:40:18.09629163-29163/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1815:40:18.09629163-29163/com.example.myappD/zyr﹕AINTACTION_MOVE
03-1815:40:18.09629163-29163/com.example.myappE/zyr﹕BDISACTION_MOVE
03-1815:40:18.09629163-29163/com.example.myappE/zyr﹕BTOUACTION_MOVE
03-1815:40:18.11129163-29163/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1815:40:18.11129163-29163/com.example.myappD/zyr﹕AINTACTION_MOVE
03-1815:40:18.11129163-29163/com.example.myappE/zyr﹕BDISACTION_MOVE
03-1815:40:18.11129163-29163/com.example.myappE/zyr﹕BTOUACTION_MOVE
03-1815:40:18.12629163-29163/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1815:40:18.12629163-29163/com.example.myappD/zyr﹕AINTACTION_MOVE
03-1815:40:18.12629163-29163/com.example.myappE/zyr﹕BDISACTION_MOVE
03-1815:40:18.12629163-29163/com.example.myappE/zyr﹕BTOUACTION_MOVE
03-1815:40:18.13129163-29163/com.example.myappD/zyr﹕ADISACTION_UP
03-1815:40:18.13129163-29163/com.example.myappD/zyr﹕AINTACTION_UP
03-1815:40:18.13129163-29163/com.example.myappE/zyr﹕BDISACTION_UP
03-1815:40:18.13129163-29163/com.example.myappE/zyr﹕BTOUACTION_UP


结论

虽然MyLinearLayout的onTouch返回true,但是MyTouch也是返回true,由于安卓触摸事件传递是由上而下,但是消费触摸事件是由下而上的,所以处于下面的MyView消费掉了触摸事件,MyLinearLayout无法消费


情况四,

研究onInterceptTouchEvent

MyLinearLayout,
    dispatchTouchEvent返回false
    onInterceptTouchEvent返回true
    onTouchEvent返回false
MyView
    dispatchTouchEvent返回false  
    onTouchEvent返回true


结果
03-1815:44:37.70120477-20477/com.example.myappD/zyr﹕ADISACTION_DOWN
03-1815:44:37.70120477-20477/com.example.myappD/zyr﹕AINTACTION_DOWN
03-1815:44:37.70120477-20477/com.example.myappD/zyr﹕ATOUACTION_DOWN


结论

虽然MyView的onTouch返回true,但是被MyLinearLayout拦截下来了(MyLinearLayout的onInterceptTouchEvent返回true),但是MyLinearLayout的onTouch返回false,即它并没有消费此次触摸事件,so,,,此次触摸事件就此结束,当然Action_Move是没有机会传递拉.


情况五,

MyLinearLayout,
    dispatchTouchEvent返回false
    onInterceptTouchEvent
ACTION_DOWN,false
ACTION_MOVE,true
ACTION_UP,false
    onTouchEvent
ACTION_DOWN,false
ACTION_MOVE,true
ACTION_UP,false
MyView
    dispatchTouchEvent返回false  
    onTouchEvent返回true


结果
03-1816:09:36.2418257-8257/com.example.myappD/zyr﹕ADISACTION_DOWN
03-1816:09:36.2418257-8257/com.example.myappD/zyr﹕AINTACTION_DOWN
03-1816:09:36.2418257-8257/com.example.myappE/zyr﹕BDISACTION_DOWN
03-1816:09:36.2418257-8257/com.example.myappE/zyr﹕BTOUACTION_DOWN
03-1816:09:36.2718257-8257/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1816:09:36.2718257-8257/com.example.myappD/zyr﹕AINTACTION_MOVE
03-1816:09:36.2968257-8257/com.example.myappD/zyr﹕ADISACTION_MOVE
03-1816:09:36.2968257-8257/com.example.myappD/zyr﹕ATOUACTION_MOVE
03-1816:09:36.2968257-8257/com.example.myappD/zyr﹕ADISACTION_UP
03-1816:09:36.2968257-8257/com.example.myappD/zyr﹕ATOUACTION_UP


结论

试着自己分析把.



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: