写点什么

2021 届毕业生还没找到 Android 开发工作,Android 小技巧

发布于: 52 分钟前

一.view 渲染机制分为:

  • onLaout 与 onMeasure

  • onDraw 映射机制

二.常用 view 有:

1.RecycleView


  • 解读源码

  • 布局管理器 LayoutManager

  • 条目装饰 ItemDecoration

  • ViewHolder 与回收复用机制


2.CardView


  • 源码的解答

  • 圆角阴影实现原理

  • 5.0 以下阴影与边距的适配

3.viewpager

  • 加载机制和如何优化

  • 如何与 Fragment 结合

4.Webview

  • 原理分析

  • JS 与 java 交互

  • 多线程 WebView 使用

  • WebView 和 native 的通信框架

三.布局 ViewGroup

  • ConstaintLayout

  • LinearLayout

  • RelativeLayout

  • FrameLayout

  • GridLayout

四.View 的绘制流程

4.1 自定义控件:

1、组合控件。这种自定义控件不需要我们自己绘制,而是使用原生控件组合成的新控件。如标题栏。2、继承原有的控件。这种自定义控件在原生控件提供的方法外,可以自己添加一些方法。如制作圆角,圆形图片。3、完全自定义控件:这个 View 上所展现的内容全部都是我们自己绘制出来的。比如说制作水波纹进度条。


View 的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()


  • 第一步:OnMeasure():测量视图大小。从顶层父 View 到子 View 递归调用 measure 方法,measure 方法又回调 OnMeasure。

  • 第二步:OnLayout():确定 View 位置,进行页面布局。从顶层父 View 向子 View 的递归调用 view.layout 方法的过程,即父 View 根据上一步 measure 子 View 所得到的布局大小和布局参数,将子 View 放在合适的位置上。

  • 第三步:OnDraw():绘制视图。ViewRoot 创建一个 Canvas 对象,然后调用 OnDraw()。


六个步骤:


  • 绘制视图的背景;

  • 保存画布的图层(Layer);

  • 绘制 View 的内容;

  • 绘制 View 子视图,如果没有就不用;

  • 还原图层(Layer);

  • 绘制滚动条。

4.2View,ViewGroup 事件分发

1.Touch 事件分发中只有两个主角:ViewGroup 和 View。


ViewGroup 包含onInterceptTouchEventdispatchTouchEventonTouchEvent三个相关事件。


View 包含dispatchTouchEventonTouchEvent两个相关事件。其中 ViewGroup 又继承于 View。


2.ViewGroup 和 View 组成了一个树状结构,根节点为 Activity 内部包含的一个 ViewGroup。


3.触摸事件由Action_Down、Action_Move、Aciton_UP组成,其中一次完整的触摸事件中,Down 和 Up 都只有一个,Move 有若干个,可以为 0 个。


4.当Acitivty接收到 Touch 事件时,将遍历子 View 进行 Down 事件的分发。ViewGroup的遍历可以看成是递归的。分发的目的是为了找到真正要处理本次完整触摸事件的 View,这个 View 会在onTouchuEvent结果返回 true。


5.当某个子 View 返回 true 时,会中止 Down 事件的分发,同时在ViewGroup中记录该子 View。接下去的 Move 和 Up 事件将由该子 View 直接进行处理。由于子 View 是保存在ViewGroup中的,多层ViewGroup的节点结构时,上级ViewGroup保存的会是真实处理事件的 View 所在的ViewGroup对象:如ViewGroup0-ViewGroup1-TextView的结构中,TextView返回了 true,它将被保存在ViewGroup1中,而ViewGroup1也会返回 true,被保存在ViewGroup0中。当 Move 和 UP 事件来时,会先从ViewGroup0传递至ViewGroup1,再由ViewGroup1传递至TextView


6.当ViewGroup中所有子 View 都不捕获 Down 事件时,将触发ViewGroup自身的onTouch事件。触发的方式是调用super.dispatchTouchEvent函数,即父类 View 的dispatchTouchEvent方法。在所有子 View 都不处理的情况下,触发Acitivity的onTouchEvent方法。


7.onInterceptTouchEvent有两个作用:


  • 拦截 Down 事件的分发。

  • 中止 Up 和 Move 事件向目标 View 传递,使得目标 View 所在的 ViewGroup 捕获 Up 和 Move 事件。

设计模式学习笔记

设计模式系列学习视频


开源分享:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》

用户头像

VX:vip204888 领取资料 2021.03.16 加入

还未添加个人简介

评论

发布
暂无评论
2021届毕业生还没找到Android开发工作,Android小技巧