- 获取画布
- onDraw、dispatchDraw
- Bitmap
- SurfaceView 的 SurfaceHolder.lockCanvas
10.1 ShapeDrawable
- 通过 shape 标签实例要转成 GradientDrawable
ShapeDrawable()
1.RectShape
2.ArcShape
3.OvalShape
4.RoundRectShape
5.PathShape
10.2 Bitmap
10.2.1 概述
- 使用
- 存储像素点
1.位图所占大小 = width * height * 一个像素所占内存大小
2.Bitmap.Config:ALPHA_8 ARGB_4444 ARGB_8888 RGB_565
10.2.2 创建 Bitmap
- BitmapFactory
- Bitmap.createBitmap
10.2.3 Bitmap.Options
10.3 SurfaceView
- Android 屏幕刷新频率是 16ms
- 技术
10.3.1 SurfaceView 和 View 使用场景
- 界面需要被动更新,用 View,涉及到交互
- 界面需要主动更新,用 SurfaceView ,不涉及到交互
- 界面需要频繁刷新,或者刷新是数据处理量比较大,用 SurfaceView,例如视频播放和摄像头。
10.3.2 SurfaceView 基本使用
- setWillNotDraw(boolean willNotDraw):为 true,表示当前控件没有绘制内容,为 false 调用 onDraw 函数
- 使用缓存 Canvas 绘图
SurfaceHolder sh = getHolder();
Canvas canvas = sh.lockCanvas();
sh.unlockCanvasAndPost(canvas);
- 监听 Surface 生命周期
1.Surface(m)、SurfaceView(v)、SurfaceHolder©–>mvc 模式
2.addCallback
10.3.3 SurfaceView 双缓冲技术
- 前端缓冲区
- 后端缓存区
- 双缓冲技术解决方案:
- 保存所有要绘制的内容,全屏重绘
- 在内容不交叉时,可以采用增量绘制