ViewGroup的事件分发

重要的点:

onclick没有时,理解为没有消费事件,

源码分析:

E/TAG: onTouchEvent -> 0false

经过我的实际测试呢,当view没有onclick事件时,view的ontouchevent()确实是返回false,源码中呢:

 if (dispatchTransformedTouchEvent(ev, false, child, idBitsToAssign))
private boolean dispatchTransformedTouchEvent(MotionEvent event, boolean cancel,
            View child, int desiredPointerIdBits) {
        final boolean handled;

        // Canceling motions is a special case.  We don't need to perform any transformations
        // or filtering.  The important part is the action, not the contents.
        final int oldAction = event.getAction();
        if (cancel || oldAction == MotionEvent.ACTION_CANCEL) {
            event.setAction(MotionEvent.ACTION_CANCEL);
            if (child == null) {
                handled = super.dispatchTouchEvent(event);
            } else {
                handled = child.dispatchTouchEvent(event);
            }
            event.setAction(oldAction);
            return handled;
        }
此时child不为null,所以
handled = child.dispatchTouchEvent(event);

为false,所以这个函数返回false,

然后就会执行

if (mFirstTouchTarget == null) {
                // No touch targets so treat this as an ordinary view.
                handled = dispatchTransformedTouchEvent(ev, canceled, null,
                        TouchTarget.ALL_POINTER_IDS);
            } 
因为
handled = child.dispatchTouchEvent(event);

为false,所以mfirstTouchTarget不会被赋值,为null。

然后就会执行

 super.dispatchTouchEvent(event);

viewGroup继承自View,也就是说,会执行viewGroup自己的dispatchTouchEvent。ontouch()->ontouchevent()

03-15 10:06:15.103 11165-11165/com.example.chang.test_shijianfenfa D/MyViewGroup: ViewGroup  :  dispatchTouchEvent:
03-15 10:06:15.103 11165-11165/com.example.chang.test_shijianfenfa D/MyViewGroup: ViewGroup : onInterceptTouchEvent: 
03-15 10:06:15.113 11165-11165/com.example.chang.test_shijianfenfa D/MainActivity: View : onTouch: 
03-15 10:06:15.113 11165-11165/com.example.chang.test_shijianfenfa E/TAG: onTouchEvent -> 0false
03-15 10:06:15.113 11165-11165/com.example.chang.test_shijianfenfa D/MainActivity: View Group : onTouch: 
03-15 10:06:15.113 11165-11165/com.example.chang.test_shijianfenfa D/MyViewGroup: ViewGroup  :  onTouchEvent: 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值