带你全面解析Android框架体系架构view篇
人生之路布满挑战,在漫长而艰辛的道路之上虽则坚持不懈、脚踏实地地执行'低头拉车'虽显艰难但若能准确把握形势明确目标则'抬头看路'便非同小可它不仅关系到你是否能抵达成功的彼岸更关乎着你是否能避免迷失在理想与现实之间无论是当下还是未来都要把目光投向远方因为只有这样才不会让自己陷入单纯理想化的误区而错失实现价值的机会
总结面试必备技能和自己的一些感想学习路线图

下载更多完整的项目包。尚未完成的任务。源码将在后续上传至GitHub的图文知识部分中展示出来。
可以点击关于我 联系我获取
一.view渲染机制分为:
- onLaout与onMeasure
- onDraw映射机制
二.常用view有:
1.RecycleView
- 分析源代码
- 布局管理器(LayoutManager)
- 条目样式(ItemDecoration)
- 持有者(Holder)与回收利用机制
2.CardView
- 源码的解答
- 圆角阴影实现原理
- 5.0以下阴影与边距的适配
3.viewpager
- 加载机制和如何优化
- 如何与Fragment结合
4.Webview
- 原理分析
- 理论探讨
- JavaScript与Java之间的交互机制
- 基于JavaScript的多线程WebView应用开发
- 跨平台开发中的WebView与 native组件通信机制
三.布局ViewGroup
- Constraint Layout
- Linear Layout
- Grid-based Linear Layout
- Frame Layout
- Grid Layout
四.View的绘制流程
4.1自定义控件:
1、组合控件 。这种定制化组件无需手动绘制,默认即可调用现有内置组件进行拼接即可实现所需效果(如标题栏显示)。
2、继承原有的控件 。这种自定义组件在原有功能基础上新增了一些操作(如实现边角的圆滑效果),并能生成圆形图片等特殊效果(如圆形背景)。
3、完全自定义控件 :这个View上所展现的内容均通过代码实现(而非复制粘贴),例如可设计出水波纹般的动态进度条效果。
View的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()
- 第一步:
OnMeasure():计算视图尺寸。通过从顶层父视图逐层向下传递并计算各子视图的尺寸值来实现。- 在此过程中,“measure”的触发将依次作用于每个子视图,并最终返回到当前层级的
OnMeasure()事件。
- 在此过程中,“measure”的触发将依次作用于每个子视图,并最终返回到当前层级的
- 第二步:
OnLayout():计算布局位置并完成页面布局。通过从顶层父视图逐层向下传递并执行各子视图的layout()方法来完成整个页面的几何安排。- 父视图将在获得其所有子视图的具体尺寸信息后,在此事件中根据相应的布局策略来决定各子视图的具体位置安排。
- 第三步:
OnDraw():生成绘图内容并显示图形界面界面元素。在该阶段中,- 首先创建一个Canvas对象,
- 然后调用OnDraw()事件以生成所需的图形数据,
- 最终将绘出的结果呈现给用户界面。
六个步骤:
- 为视图创建背景;
- 将画布中的图层保存下来;
- 生成视图内容;
- 绘制视图子组件(若存在则完成操作);
- 恢复画布中的层次结构;
- 添加滚动条控件。
4.2View,ViewGroup事件分发
1.Touch事件分发中只有两个主角:ViewGroup和View。
该视图组涉及ViewGroup 包含 onInterceptTouchEvent、dispatchTouchEvent 和 onTouchEvent 三项关键事件。
该类涉及dispatchTouchEvent与on.TouchEvent两个相关事件,并且其中的ViewGroup又继承自View
2Vane-Group与View之间形成了层次化的组织架构,其中根节点对应的是Activity内部嵌入的一个ViewGroup
**3. **触摸事件由Action_Down、Action_Move、Aciton_UP组成,在一次完整的触摸事件中,Down和Up各只有一个动作(可零个),Move会有多个动作(可零个)。
Upon receiving a Touch event by the Acitivity, the application will distribute Down events to its child Views. The ViewGroup's iteration resembles a recursive process, and this distribution aims to identify the specific View that should handle the entire touch event. Once the onTouchuEvent() callback returns true, this View will be designated to manage the event.
当某个子View返回true时会中止Down事件的分发并在ViewGroup中记录该子View随后的Move和Up事件将由该子View直接处理由于子View是保存在ViewGroup中的多层ViewGroup的节点结构时上级ViewGroup保存的会是真实处理事件的 View 所在的 ViewGroup 对象例如在 View Group0- View Group1- TextView这样的结构中 TextView 返回了true它将被保存在 View Group1 而 View Group1 也会返回true被保存在 View Group0 当 Move 和 UP 事件发生时会先从 View Group0 传递到 View Group1 再由 View Group1 传递到 TextView。
- 如果所有子视图未捕获Down事件,则该Group自身会引发onTouch事件。该方式涉及通过调用super.dispatchTouchEvent函数(即父类View的dispatchTouchEvent方法)执行触 发操作;当无子视图处理时,则会触 发Activity的onTouc t 方法。
7.onInterceptTouchEvent有两个作用:
- 换挡Down事件的分发。
- 阻止Up和Move事件向目标View传递,则导致目标View所在的ViewGroup捕获这些Up和Move事件。
完整的更多项目下载。未完待续的状态下,请访问GitHub获取源代码资源,并留意随后上传至GitHub的图文知识内容。点击关于我以获取更多信息
