如何使用Canvas绘制drawText旋转角度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Canvas绘制drawText旋转角度相关的知识,希望对你有一定的参考价值。

绘制好其他东西之后

将你的 canvas 旋转一定的角度

绘制出你想要的文字


例如

----------需求------------

1,一行水平文字"I love you"

2,一行与1中的文字成45度角的文字

----------- html 代码----------------

<canvas id="myCanvas" width="300" height="300" style="border:1px solid #d3d3d3;">

Your browser does not support the HTML5 canvas tag.

</canvas>

------------   js 代码   ---------------

var c=document.getElementById("myCanvas");

var ctx=c.getContext("2d");

ctx.font="40px Arial";

ctx.fillText("I love you",10,50);

ctx.rotate(45*Math.PI/180);

ctx.fillText("I love you",10,50);

--------------------------------------


预览结果

参考技术A 这个要用到path.
Paint paint = new Paint();
paint.srtColor(0X80FF000);
Path path = new Path();
path.addCircle(10,10,5,Direction.CW);
canvacs.drawTextOnPath("aling a path",path,0,0,paint);本回答被提问者和网友采纳

Canvas drawText文字垂直居中方案

参考技术A 最近绘制自定义view时,用到画笔绘制文本,针对drawText的绘制做一些总结。

Canvas.drawText的方法定义如下:

其中,x坐标比较好理解,是文本起始绘制位置的x坐标。但是y是指文本绘制的baseline的y坐标。

要理解上图中的绘制效果,让我们再认识下FontMetrics类,该类是Paint的内部类。

在设置好字体尺寸后,通过Paint.getFontMetricsInt()方法来获得一个FontMetrics对象。FontMetrics定义了几个绘制时要用到的关键坐标位置,各位置含义和图示如下。注意,这四个字段的值是相对于baseline的相对值。

即已知Top值,则baseline = top - fontMetrics.top.

1、已知a段(bottom和baseline之间距离)高度:a = fontMetrics.bottom
2、计算b段(bottom和中线的距离)高度:b = (fontMetrics.bottom - fontMetrics.top)/2
3、计算c段(baseline和中线的距离)高度:c=b-a
4、计算baseline = centerY + c = centerY + b -a = centerY - (fontMetrics.bottom + fontMetrics.top) /2

实际计算时,也可以用decent和asent,即baseline = centerY - (fontMetrics.ascent + fontMetrics.descent) /2

原理和场景2一致,此时centerY=(rect.bottom+rect.top)/2。
最终baseLine = (rect.bottom+rect.top)/2 - (fontMetrics.top + fontMetrics.bottom) /2

参考文档:
Android 图解Canvas drawText文字居中的那些事
drawText方法的baseline计算
Android Canvas drawText实现中文垂直居中

以上是关于如何使用Canvas绘制drawText旋转角度的主要内容,如果未能解决你的问题,请参考以下文章

JS中canvas画布绘制中如何实现缩放,位移,旋转

带有SpannableString的Android Canvas drawText

Canvas drawText文字垂直居中方案

android中canvas.drawText参数的介绍以及绘制一个文本居中的案例

canvas二:绘制圆和其他曲线

canvas内image旋转