在安卓系统中,在圆形路径上绘制文本

6

我需要在圆形路径上绘制文本。我已经尝试使用drawTextOnPath()方法,但对于像附图中的“受孕窗口”这样的文本,文本会旋转并且不可读。

This is the way I need

The text "Fertile window" isnt readable

我使用的代码:

customPath2.addArc(mCircleRectF, 30F, 64.28F);
    customPaint2.setAntiAlias(true);
    customPaint2.setDither(true);
    customPaint2.setStrokeWidth(mCircleStrokeWidth);
    customPaint2.setColor(Color.parseColor("#93BE66"));
    customPaint2.setStyle(Paint.Style.STROKE);
    customPaint2.setStrokeCap(Paint.Cap.ROUND);
    canvas.drawPath(customPath2, customPaint2);

    titlePaint.setColor(Color.parseColor("#ffffff"));
    titlePaint.setAntiAlias(true);
    titlePaint.setTypeface(Typeface.MONOSPACE);  titlePaint.setLetterSpacing(0.07F);
    titlePaint.setTextAlign(Paint.Align.CENTER);
    titlePaint.setTextSize(35f);

    canvas.drawTextOnPath("FERTILE WINDOW", customPath2, 0, 8, titlePaint);

从顶部开始,您想要前90度为“向下”文本,接下来的180度为“向上”,然后其余的再次为“向上”吗?是否只使用XML?您是否编写任何代码?不太清楚您想要什么。所展示的行为是预期的,特别是因为您可以“旋转”视图,并保持所有文本从同一视角可读。 - Bonatti
这可能会对你有所帮助:https://dev59.com/bWsy5IYBdhLWcg3wxAuO - Ravi
@Bonatti - 我使用了 onDraw() 而不是 XML。我创建并绘制了路径。 - Sahana Prabhakar
@RRR - 是的,我确实参考了那个链接。它提到了drawTextOnPath()方法,但没有说明如何进行旋转。就像那个例子中,文本位于圆的左上方,很容易阅读。但在我的例子中,我希望将文本放在环的底部。 - Sahana Prabhakar
1
参考这个问题。他也有弧形,而且他的文本显示得很正确。 - Vucko
1个回答

4

感谢评论区的帮助,若要将文本“向外”绘制,则使弧线逆时针
在您的示例中,startAngle 变为 94.28,而 sweepAngle 变为 -64.28

Kotlin:

val enclosingRect = RectF(0f, 0f, 200f, 200f)
val path = Path()
path.addArc(enclosingRect, 94.28f, -64.28f)
canvas.drawTextOnPath("FERTILE WINDOW", path, 0f, 0f, myPaint)

Java:

RectF enclosingRect = new RectF(0f, 0f, 200f, 200f);
Path path = new Path();
path.addArc(enclosingRect, 94.28f, -64.28f);
canvas.drawTextOnPath("FERTILE WINDOW", path, 0f, 0f, myPaint);

这是针对圆底部的文本(从0180或从-180-360度)。

对于角度在180360之间或0-180度之间的情况,您希望以顺时针方向绘制弧线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接