这是我参与「第四届青训营」笔记创作活动的第3天。
01 UI组件
什么是android UI:图形用户界面
常规的UI组件主要有文本、图片、按钮、复选框、输入框、单选框等,高级UI组件有滑动、列表、布局、下拉刷新、分页等,高级UI组件可以嵌套其他组件。
02 布局
linearlayout
属性:
- android:orientation:布局内组件的排列方式
- android:layout_weight:布局内组件大小权重
- abdroid:divider:布局内组件间分割线
设置layout weight=1 layout_height= 0,是将剩下的高度全部填充
relativelayout
(来源:青训营PPT)
framelayout
层级布局,可以实现嵌套。FrameLayout又称作帧布局,它相比于LinearLayout和RelativeLayout要简单很多,因为它的应用场景也少了很多。这种布局没有方便的定位方式,所有的控件都会默认摆放在布局的左上角。
- android:foreground 设置前景图像
- android:foregroundGravity 设置前景图像Gravity
constraintlayout
常用属性:
(来源:青训营PPT)
所有视图均根据同级视图与父布局之间的关系进行布局。
03 渲染
布局加载(编写布局文件、注册manifest、设置布局文件)-布局解析-布局渲染
布局加载中setContentView:创建DecorView最终由LayoutInflater来加载XML文件
布局解析中LayoutInflater 解析XML文件,并根据XML文件生成了View实例,并肩View实例添加到其ViewFroup中。createView根据XML中View类名来找到相应View,并将XML中描述属性解析为AttributeSet,并作为第二个参数传递给View构造器。
view绘制流程:View 的绘制流程分为三步:在自定义View的时候一般需要重写父类的onMeasure()、onLayout()、onDraw()三个方法,来完成视图的展示过程。一个完整的绘制流程包括measure、layout、draw三个步骤。
vsync信号:Android 系统每隔 16ms 发出 VSYNC 信号,触发对 UI 进行渲染,VSync 是 Vertical Synchronization(垂直同步)的缩写,是一种在PC上很早就广泛使用的技术,可以简单的把它认为是一种定时中断。而在 Android 4.1(JB) 中已经开始引入 VSync 机制,用来同步渲染,让AppUI 和 SurfaceFlinger 可以按硬件产生的 VSync 节奏进行工作。
UI渲染:
04 交互
1.通过findViewById获取View实例 2.添加相应的监听器(匿名内部类)
findViewById的原理是迭代查找,从上至下。
常用的事件监听器: onClick();onLongClick();onFocusChange();onKey();onTouch();
屏幕触摸事件
对应用层而言,输入事件的源头是位于/dev/input下的设备节点,而输入系统的终点是WMS管理的某个窗口。最初的输入事件位内核生成的原始事件,而最终交付给窗口的则是KeyEvent或MotionEvent对象。因此Android输入系统的主要工作是读取设备节点中的原始事件,将其加工封装,然后派发给一个特点的窗口以及窗口中的控件。这个过程由InputManagerService系统服务为核心的多个参与者共同完成。
触摸事件:常见的有ACTION_DOWN;ACTION_UP;ACTION_MOVE;
触摸事件分发:
事件分发成v形,从上到下分发,从下到上处理
05 动画
(青训营PPT)