6.1 硬件加速
6.1.1 概述
- GPU:图形处理器
- API 11 之前没有 GPU 概念,API 14 硬件加速功能默认开启,API 11 - 13 默认是关闭的。
6.1.2 软件绘制与硬件加速区别
- CPU
- 让 View 层次结构失效
- 绘制 View 层次结构
- GPU(实际上使用 OpenGL 相关函数完成实际绘制)
- 让 View 层次结构失效
- 记录、更新显示列表
- 绘制显示列表
- GPU 问题
6.1.3 禁用 GPU 硬件加速的方法
1.application
<application android:hardwareAccelerated="false">
2.activity
<activity android:hardwareAccelerated="false">
3.在 Window 层次上使用(不支持关闭)
getWindow.setFlags(
WindowManager.LayyoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayyoutParams.FLAG_HARDWARE_ACCELERATED)
)
4.在 View 层次上使用如下代码关闭硬件加速(不支持开启硬件加速)
4.1.setLayerType(View.LAYER_TYPE_SOFTWARE,null)
4.2.android:layerType="sofware"
6.2 文字
6.2.1 概述
- 基线
public void drawText(String text,float x,float y,Paint paint)
x,y 表示的是基线的位置坐标
1.paint.setTextAlign() Paint.Align.CENTER 左中右
6.2.2 绘图四线格与 FontMetrics
- 四线格
- top 可绘制的最高高度
- ascent 字符最高高度所在线
- baseline
- descent
- bottom
- FontMetrics 计算 四线格位置
fontMatric.ascent = ascent的y坐标-baseline的y坐标-->负数
descent = descent的y坐标 - baseline的y坐标 --> 负数
6.2.3 常用函数
1.字符串所占区域高度
Paint.FontMetrics fontMetrics = mPaint.getFontMetrics();
int top = (int) (baseLineY + fontMetrics.top);
int bottom = (int) (baseLineY + fontMetrics.bottom);
int height = bottom - top;
2.宽度
mPaint.measureText(String text);
2.最小矩阵
mPaint.getTextBounds()
6.3 Paint 常用函数
- setPathEffect(PathEffect effect) 设置路径样式
- setStrokeCap(Paint.Cap cap) 设置线帽
- setStrokeJoin(Paint.Join join) 设置转角
- setDither(boolean dither) 设置抗抖动效果
- setSubpixelText(boolean subpixelText) 亚像素 增加清晰度