这是我参与「第四届青训营 」笔记创作活动的第4天
交互
交互分为两个部分:
- 获取View实例
- 添加相应监听器
获取View实例-findVicwByld
常用交互事件监听器
| 回调方法 | 事件监听器 |
|---|---|
| onClick() | View.OnClickListener 当用户轻触项目(在触摸模式下),或者使用导航键或轨迹球聚焦于项目,然后按适用的Enter键或按下轨迹球时,系统会调用此方法。 |
| onLongClick() | View.OnLongClickListener 当用户轻触并按住项目(在触摸模式下)时,或者使用导航键或轨迹球聚焦于项目,然后按住适用的"Enter”键或按住轨迹球(持续一秒钟)时,系统会调用此方法。 |
| onFocusChange() | View.OnFocusChangeListener 当用户使用导航键或轨迹球转到或离开项目时,系统会调用此方法。 |
| onKey() | View.OnFocusChangeListener 当用户聚焦于项目并按下或释放设备上的硬件按键时,系统会调用此方法。 |
| onTouch() | View.OnTouchListener 当用户执行可视为触摸事件的操作时,包括按下、释放或屏幕上的任何移动手势(在项目边界内),系统会调用此方法。 |
屏幕触摸事件
所有的交互事件都来自于对屏幕触摸信号的处理,View.OnClickListener()等常用点击事件是对交互事件的二次封装
触摸事件-MotionEvent
当用户触摸屏幕时,系统将建立一系列的MotionEvent对象,MotionEvent包含关于发生触摸的位置和时间等细节信息,MotionEvent对象被传递到相应的捕获函数中,例如onTouchEvent()。
捕获触摸事件
- Activity和View都有onTouchEvent(),用于处理触摸事件。
- 当用户触摸屏幕时,会回调触摸视图上的onTouchEvent()。对于最终被识别为手势的每个轻触事件序列,onTouchEvent()都会多次被触发。
触摸事件分发
顺序:Activity ——> ViewGroup ——> View
核心方法:
- dispatchTouchEvent (事件分发)
- onInterceptTouchEvent (事件拦截)
- onTouchEvent (事件响应)
View的事件响应
- 在onTouchEvent()的ACTION_DOWIN设置了一个延时Runnable,用于处理onLongClickListener。
- 在onTouchEvent()的ACTION_UP中,判断onLongClick是否执行,未执行则移除,然后执行onClickListener
动画
常见动画类型
- 帧动画
- 补间动画
- 属性动画
帧动画
补间动画
插值器
Interpolator:是一个接口。设置属性值从初始值过渡到结束值的变化规律
View动画小结
属性动画
动画总结
两类动画的根本区别在于:是否改变动画本身的属性
- 视图动画:不改变动画的属性,在动画过程中仅对图像进行变换来达到动画效果。无论动画结果在哪,该View的位置和响应区域都是在原地,不会根据结果而移动;
- 属性动画:改变了动画属性 因属性动画在动画过程中对动态改变了对象属性,从而达到了动画效果
自定义View
创建View
| 构造器 | 应用场景 |
|---|---|
| 1个参数 | Java代码中创建View |
| 2个参数 | 通过XML声明创建View |
| 3个参数 | 通过XML声明创建View + Style |
| 4个参数 | 通过XML声明创建View + Style + Theme |
处理View布局
| 复写方法 | 应用场景 |
|---|---|
| onMeasure | 一般需要复写宽高设置为wrap_content场景、以及组件宽高有比例限制 |
| onLayout | 继承自ViewGroup时必须复写,继承自View时一般不用 |
| onSizeChanged | 视图大小发生改变时调用 |
绘制View
核心类:Paint && Canvas
处理用户交互
| 交互事件 | 操作逻辑 |
|---|---|
| ACTION DOWN | 设置操作状态 |
| ACTION MOVE | 处理拖拽,触发UI更新 |
| ACTION UP | 处理开关状态,播放动画 |
| ACTION CANCEL | 复位操作状态 |
处理动画
- 设置属性动画,同时添加监听器
- 在动画监听器中,根据属性值更新UI状态值,并触发UI绘制
自定义View小结
后记
课程中我学习了交互、动画、自定义View的相关内容。整体课程体量有一定难度,课后需要借助课程复习,更好地吸收课程内容,之后通过练习来掌握常规 & 高级 UI 编程。