硬件加速
Android在API14过后默认开启硬件加速,在GPU加速的时候,实际上使用了OpenGL的相关函数来完成绘制。
优点是提高Android系统显示和刷新的速度。
缺点:
- 兼容性问题
- 内存消耗变大,加载OpenGL会增大内存使用
- 电量消耗大,因为多了一个硬件工作
下面有一个支持函数的表格,叉表示一直不支持。
在API14以上,如果不用硬件加速,可以关闭。
1.在AndroidManifeest中关闭硬件加速,可以为整个应用开启/关闭硬件加速
<application android:hardwareAccelerated="true"/>
2.在Activity标签下开启或关闭硬件加速
<activity android:hardwareAccelearted="true"/>
3.在Window层级上开启硬件加速,在Window层级上只能开启,不能关闭。
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWEAR_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWEAR_ACCELERATED);
4.在View层级关闭硬件加速,View层级不支持开启硬件加速
setLayerType(View.LAYER_TYPE_SOFTWARE,null)
<LinearLayout
android:layerType="sofrware">
文字
文字绘制的时候一般会调用drawtext函数
public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint)
这里的y是文字基线的y值,这里的x并不是基线开始的x值,x文字所占用的矩形的左边的x值。
还有一个函数,paint的setTextAlign()
public void setTextAlign(Align align)
这里可以传入三个值
public enum Align {
/**
* The text is drawn to the right of the x,y origin
*/
LEFT (0),
/**
* The text is drawn centered horizontally on the x,y origin
*/
CENTER (1),
/**
* The text is drawn to the left of the x,y origin
*/
RIGHT (2);
}
当我们传入LEFT的时候,绘制出来的文字左下角就是x的坐标。当我们传入CENTER的时候,文字的正中间才是x的坐标。
文字在绘制的时候,除了基线,还有4个线
- ascent:系统推荐的,在绘制单个字符的时候,字符应该使用的最高高度所在的线
- descent:系统推荐的,在绘制单个字符的时候,字符应该使用的最低高度所在的线
- top:系统推荐的,在绘制单个字符的时候,字符应该使用的最高高度所在的线
- bottom:系统推荐的,在绘制单个字符的时候,字符应该使用的最高高度所在的线
FontMetrics
FontMetrics为我们提供了其他四条线相对于基线的位置
- ascent = ascent线的y坐标 - 基线的y坐标
- descent = descent线的y坐标 - 基线的y坐标
- top = top线的y坐标 - 基线的y坐标
- bottom = bottom线的y坐标 - 基线的y坐标
获取文字最小矩形
文字在绘制的时候上下左右都会有一点边框,如果我们想获取文字的最小矩形,我们可以用getTextBounds方法来获取。
public void getTextBounds(String text, int start, int end, Rect bounds)
如果不设置paint的align,那么(0,0)默认是基线,获取出来的矩形可能y是负数。
paint
public PathEffect setPathEffect(PathEffect effect)
设置画笔路径样式
public void setStrokeCap(Cap cap)
设置画笔线帽样式。
- Cap.ROUND:圆形线帽
- Cap.SQUARE:方形线帽
- Cap.BUTT:无线帽
下面分别是无线帽,方形线帽和圆形线帽
public void setStrokeJoin(Join join)
设置路径转角样式
- Join.MITER锐角
- Join.ROUND圆弧
- Join.BEVEL直线
public void setDither(boolean dither)
设置抗抖动,在多个颜色渐变过渡的时候,因为RGB模式下只能显示65535种颜色,在颜色丰富的情况下无法呈现,就会有很多马赛克的情况,这个时候设置抗抖动,过渡效果就会更好。
public void setFakeBoldText(boolean fakeBoldText)
设置是否为粗体
public void setStrikeThruText(boolean strikeThruText)
设置删除线效果
public void setUnderlineText(boolean underlineText)
设置下划线
public void setTextAlign(Align align)
设置写字的模式
public void setTextScaleX(float scaleX)
设置水平拉伸
public void setTextSkewX(float skewX)
设置水平倾斜,默认为-0.25,往右倾斜。
public void setSubpixelText(boolean subpixelText)
设置亚像素绘制文本,增加文本清晰度,可能会出现不适配的情况