自定义控件
自定义控件空指针问题 ,构造函数要写成
public MineTextTool(Context context) {
this(context,null);
}
public MineTextTool(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public MineTextTool(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
getAttrs(attrs);
init();
}
paint绘制文字
paint.fontmetriccs 类度量字体有一下属性:
- 基准点是baseline
- Ascent是baseline之上至字符最高处的距离
- Descent是baseline之下至字符最低处的距离
- Leading文档说的很含糊,这个我还不清楚,但有人说是上一行字符的descent到下一行的ascent之间的距离,也有人说不是
- Top指的是指的是最高字符到baseline的值,即ascent的最大值
- 同上,bottom指的是最下字符到baseline的值,即descent的最大值
即从上到下依次为 top ascent baseline desent buttom 同时需要注意的是top为负值,判断距离需要使用math.abs()获取绝对值。
TextPaint textPaint = new TextPaint();
textPaint.setTextSize(textSizePx);
textPaint.setColor(textColor);
int width = (int) Math.ceil(textPaint.measureText(text));
Paint.FontMetrics fontMetrics = textPaint.getFontMetrics();
int height = (int) Math.ceil(Math.abs(fontMetrics.bottom) + Math.abs(fontMetrics.top));
Bitmap bitmap = Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawText(text,0,Math.abs(fontMetrics.ascent),textPaint);
return bitmap;