这是我参与「第四届青训营」笔记创作活动的第十四天。这篇笔记主要是对安卓客户端常规&高级UI编程”这节课中自定义UI相关部分的记录。
笔记
自定义UI
自定义View示例-创建View
| 构造器 | 应用场景 |
|---|
| 1个参数 | Java代码中创建View |
| 2个参数 | 通过XML声明创建View |
| 3个参数 | 通过XML声明创建View + Style |
| 4个参数 | 通过XML声明创建View + Style + Theme |
自定义View示例-处理View布局
- View的测量,按需复写onMeasure方法
- View的布局,按需复写onLayout方法
- 可利用requestLayout()触发View重布局
| 复写方法 | 应用场景 |
|---|
| onMeasure | 一般需要复写宽高设置为wrap_content场景、以及组件宽高有比例限制 |
| onLayout | 继承自ViewGroup时必须复写,继承自View时一般不用 |
| onSizeChanged | 视图大小发生改变时调用 |
自定义View示例-绘制View
- View的绘制,按需复写onDraw方法
- 利用Canvas和Paint来绘制Wiew
- 可利用invalidate()/postInvalidate()触发View重绘
| 核心类 | 核心方法 | 相应功能 |
|---|
| Paint | setStyle | 设置绘制模式 |
| Paint | setColor | 设置颜色 |
| Paint | setStrokeWidth | 设置线条宽度 |
| Paint | setTextSize | 设置文字大小 |
| Paint | setAntiAlias | 设置抗锯齿开关 |
| Canvas | drawCircle | 绘制圆形 |
| Canvas | drawRect | 绘制矩形 |
| Canvas | drawRoundRect | 绘制圆角矩形 |
| Canvas | drawBitmap | 绘制图片 |
| Canvas | drawLine | 绘制线条 |
自定义View示例-处理用户交互
- 获取响应事件,按需复写onTouchEvent方法
- 根据MotionEvent处理相应的交互事件
- 必要时通过复写onInterceptTouchEvent来拦截事件
- 必要时通过复写dispatchTouchEvent来分发事件
| 交互事件 | 操作逻辑 |
|---|
| ACTION_DOWN | 设置操作状态 |
| ACTION_MOVE | 处理拖拽,触发UI更新 |
| ACTION_UP | 处理开关状态,播放动画 |
| ACTION_CANCEL | 复位操作状态 |
自定义View示例-处理动画
- 根据动画需要选择合适的动画类型
- 按需启动动画、适时停止动画
- 可利用AnimatorListener来监听动画
- 设置属性动画,同时添加监听器
- 在动画监听器中,根据属性值更新UI状态值,并触发UI绘制。
总结
通过本节课的学习,我们可以根据自己喜欢的方式来定义自己喜欢的UI,而脱离了原有模板的限制,从而绘制出独属于自己的、个性化的UI。