android源码---ViewGroup的dispatchTouchEvent()的源码分析

这里写图片描述
貌似在LinearLayout RelativeLayout的dispatchTouchEvent()方法都在ViewGroup中。对于TextView的也是在View中。
①当调用方法的时候,如果是ACTION_DOWN时,要清除原有的触摸的事件。
这里写图片描述
②对于cancelAndClearTouchTargets()方法,参数event不可能为null,因此重要的是for循环。然后调用dispatchTransformedTouchEvent()方法,并且传递的cancle为true.这个方法是处理触摸后view的平移的方法。
这里写图片描述
③对于平移的方法,因为传递过来的参数cancle是true。因此会调用下面划横线的方法。如果没有子view,那么就会调用父类的dispatchTouchEvent(),这样就形成了递归。否则就会调用子类的dispatchTouchEvent()的方法。这样进行判断在子view中是否进行拦截。
这里写图片描述
对于在View中的dispatchTouchEvent()方法,这里也是对当前的onTouch()方法进行判断,如果在onTouch()中返回了true.那么就代表了处理了该事件。
这里写图片描述
这里写图片描述

④清除所有的触摸对象,也就是调用recycle()置空。
这里写图片描述
⑤接着还是看dispatchTouchEvent()方法。intercepted默认为false.调用onIntercepTouchEvent()方法进行判断是否进行拦截。如果拦截就为true.
这里写图片描述
⑥如果cancled为false并且intercepted为false.也就是不是取消操作,也不是拦截操作,那么就开始执行下面的代码。
这里写图片描述
再这里使用了倒序遍历的方式,主要能找到最新加入的view。
这里写图片描述
⑦canViewReceivePointerEvents()方法,原意翻译是能接受到指针事件的view,但是在源码中发现,就是找到是visible的view
这里写图片描述
对于这个方法,主要是判断触摸的点是否在view的范围之内。也就是是否触摸了当前的view。
这里写图片描述
⑧接着看dispatchTouchEvent()方法中,这时候的传递给dispatchTransformedTouchEvent()方法中cancel为false. 如果返回的是true,那么就是已经被处理了。那么就设置alreadyDispatchedToNewToudchTarget为true。 表明已经分发到触摸的目标。并且这个Boolean值在下面还是会被使用。
这里写图片描述
⑨紧接着查看dispatchTransformedTouchEvent()中的方法。这里具体细节不太明白。但是大致还是将事件分发到子view中,返回是否处理的Boolean值,并且做相应的view矩阵变换。
这里写图片描述
这里写图片描述
⑩在上面获取的参数alreadyDispatchedToNewToudchTarget为true直接就返回已经处理。然后在这里竟然又调用dispatchTransformTouchEvent()返回是否进行处理的代码。最终也是返回boolean值。
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android ViewAndroid 中最基本的 UI 构建块之一,负责在屏幕上绘制视图并响应用户的操作。下面是一个简单的 View 源码分析过程: 1. 首先,我们需要了解 View 的继承关系。ViewAndroid 中所有 UI 组件的基类,它的直接子类包括 ViewGroup、TextView、ImageView 等。其中,ViewGroup 又是各种布局容器的基类,例如 LinearLayout、RelativeLayout 等。 2. 接着,我们可以查看 View 的基本属性。这些属性包括 layout_width、layout_height、padding、background 等。其中,layout_width 和 layout_height 决定了 View 在布局中的大小,padding 指定了 View 的内边距,background 则是 View 的背景。 3. View 的绘制过程可以分为两个阶段:测量和绘制。在测量阶段,View 会根据其 layout_width 和 layout_height 等属性计算出自身的尺寸。在绘制阶段,View 会将自身绘制到屏幕上。 4. View 的事件响应机制是 Android 中 UI 开发的重要部分。当用户触摸屏幕时,系统会将事件传递给 ViewView 会根据自身的点击区域判断是否响应该事件,并将事件传递给其父容器或下一个 View 进行处理。 5. 最后,我们可以查看 View源码实现,深入了解 View 的内部实现逻辑。例如,View 的测量和绘制过程是通过 onMeasure 和 onDraw 方法实现的,事件响应机制是通过 onTouchEventdispatchTouchEvent 方法实现的。 总的来说,理解 Android View源码实现可以帮助我们更好地理解 Android UI 开发的工作原理,从而编写出更高效、更灵活、更具交互性的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值