在Path形状的Android中间居中放置文本

时间:2019-07-11 13:52:16

标签: java android svg kotlin

我正在尝试在svg路径内绘制一些文本。我需要形状的最大部分。并像点1那样进行正常旋转。但是,我目前所拥有的只是点2的结果。 有人可以帮我达到第1点的结果吗?

draw a path with canvas and draw a text in this path

我正在使用Canvas绘制路径:

var bitmap = Bitmap.createBitmap(
            1000,
            1000,
            Bitmap.Config.ARGB_8888)
var  canvas =  Canvas(bitmap)
canvas.drawColor(Color.LTGRAY)

var paint  = Paint()
paint.color =Color.GREEN
canvas.drawPath(p, paint)

paint.color = Color.BLACK
paint.setStyle(Paint.Style.FILL)
paint.textSize = 20f
var text= "250"
canvas.drawTextOnPath(text,
p,
50f,0f,
paint)

var rectF = RectF()
pathObject.computeBounds(rectF, true)

//the rectangle to show the rect of the Path 
paint.color = Color.TRANSPARENT
paint.setStyle(Paint.Style.STROKE)
paint.color = Color.RED
paint.strokeWidth  =2f
canvas.drawRect(rectF,paint)

1 个答案:

答案 0 :(得分:1)

您无法在Android中调用任何简单的方法来查找路径中最大区域的中心。

您需要做的是使用一种算法来找到适合多边形的最大圆。然后将您的文字放在该位置。

这个问题可能有用:Largest circle inside a non-convex polygon

首先,您需要将路径转换为多边形(一组直线段)。您的路径可能已经是这种形式。如果不是(即包含弧和贝塞尔曲线等),则需要将其转换为多边形。在API 26+中,您可以使用Path.approximate()。在较早的Android版本中,该过程会有些棘手。