c 语言drawtext字体旋转,android-如何水平旋转由drawTextonPath创建的圆的文本?

我有一个函数使用drawTextOnPath在画布上绘制文本.我计算了偏移量,一切正常,但我想以一种特殊的方式绘制它.当前文本旋转偏移量等于圆偏移量.我想将文本旋转90/45度.但是我不知道怎么做.

请任何想法.

private void drawLegend(Canvas canvas) {

canvas.save(Canvas.MATRIX_SAVE_FLAG);

canvas.rotate(-228, centerX, centerY);

Path circle = new Path();

double halfCircumference = (radius * 2 * Math.PI) - ((radius * 2 * Math.PI) / 8) * 2;

double increments = 5;

for (int i = 0; i <= this.mMaxSpeed; i += increments) {

circle.addCircle(centerX, centerY, radius, Path.Direction.CW);

canvas.drawTextOnPath(String.format("%d", i),

circle,

(float) (i * halfCircumference / this.mMaxSpeed),

-20f,

scalePaint);

}

canvas.restore();

}

这是当前映射

ru4R7.jpg

这是我如何展示它的方式

HaQJ7.jpg

解决方法:

解决方案不是使用drawTextOnPath进行绘制,而是使用drawText在画布上进行绘制

canvas.drawText(String.valueOf(0), (x - width / 2) + 35, (y + height / 2) - 25, scalePaint);

canvas.drawText(String.valueOf(5), (x - width / 2) - 20, (y) + 8, scalePaint);

canvas.drawText(String.valueOf(10), (x - width / 2) + 30, (y - height / 2) + 40, scalePaint);

canvas.drawText(String.valueOf(15), (x), (y - height / 2) - 18, scalePaint);

canvas.drawText(String.valueOf(20), (x + width / 2) - 30, (y - height / 2) + 40, scalePaint);

canvas.drawText(String.valueOf(25), (x + width / 2) + 25, (y) + 8, scalePaint);

canvas.drawText(String.valueOf(30), (x + width / 2) - 35, (y + height / 2) - 25, scalePaint);

7个月后更新

秘诀是使用sin和cos函数来计算x和y的偏移量.

double theta = (7 * PI / 4) - (i * (2 * PI / 40));

double xPos = radiusScale * 1.2 * Math.sin(theta) + centerX - widthText / 2;

double yPos = radiusScale * 1.2 * Math.cos(theta) + centerY + heightText / 2;

canvas.drawText(textNotch, (float)xPos, (float)yPos, scalePaint);

标签:canvas,drawtext,android

来源: https://codeday.me/bug/20191118/2026466.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值