protected void onDraw(Canvas canvas) {
Paint mpaint=new Paint(Paint.ANTI_ALIAS_FLAG);
Paint.FontMetrics fontMetrics=new Paint.FontMetrics();
super.onDraw(canvas);
Rect rect=new Rect();
//花圆
mpaint.setStyle(Paint.Style.STROKE);
mpaint.setStrokeWidth(util.getDP(15));
canvas.drawCircle(getWidth()/2,getHeight()/2,500,mpaint);
//画曲线
mpaint.setColor(Color.BLUE);
mpaint.setStrokeCap(Paint.Cap.ROUND);
canvas.drawArc(getWidth()/2-500,getHeight()/2-500,getWidth()/2+500,getHeight()/2+500,0,270,false,mpaint);
mpaint.setStyle(Paint.Style.FILL);
mpaint.setTextSize(util.getDP(100));
mpaint.setTextAlign(Paint.Align.CENTER);
mpaint.getTextBounds("adbk",0,"adbk".length(),rect);//获取文字的基线
mpaint.getFontMetrics(fontMetrics);
//int offset=(rect.top+rect.bottom)/2;//纵向居中
float offset=(fontMetrics.ascent+fontMetrics.descent)/2;//纵向居中
canvas.drawText("aaaa",getWidth()/2,getHeight()/2-offset,mpaint);
}
1.画一个空心的圈
2.画一个弧线,但是绘画距离是需要注意,获取当前的宽高减去半径,进行绘画。
3,画文字 让文字显示的在中间,不是baseline 在中间,需要做偏移
4.******************************************重要的*********************************************
两种方法
第一:算出文字的中心点 实时的中心
1. getTextBounds方法,将文字的的宽高获得,并且传给Rect
2.通过top和 (rect.top+rect.bottom)/2算出中心点
3.绘画的时候减去中心点的距离
第一种适用于,文字不变化的情况
第二种:FontMetrics 不是实时中心点 字体不会跳动
fontMetrics.ascent 顶线
fontMetrics.descent 底线
Paint.FontMetrics fontMetrics=new Paint.FontMetrics();
fontMetrics.ascent+fontMetrics.descent
2020-03-14 文字绘制
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Html5新增的canvas是个强大的功能, 估计大家平时都会用到,只是频率不高,偶尔用它合成图片,但是如果不进行...
- 概述 吐槽下IOS下 的图形绘图,代码冗长,不得不自己重新封装方法。整理形成本文。 绘制线 绘制矩形 垂直和居中绘...
- 奋战了两天一夜,终于实现了map的多边形绘制功能。不得不说,过程有很多坑,但知道之后其实很好解决,就poly...