forked from shihaam/thijooree
curved text on wheel
This commit is contained in:
@@ -316,8 +316,6 @@ class CircularWheelView @JvmOverloads constructor(
|
|||||||
|
|
||||||
val iconX = cx + cosA * (outerRadius * 0.63f)
|
val iconX = cx + cosA * (outerRadius * 0.63f)
|
||||||
val iconY = cy + sinA * (outerRadius * 0.63f)
|
val iconY = cy + sinA * (outerRadius * 0.63f)
|
||||||
val textX = cx + cosA * (outerRadius * 0.84f)
|
|
||||||
val textY = cy + sinA * (outerRadius * 0.84f)
|
|
||||||
|
|
||||||
// Icon — radially oriented; top items are naturally upside-down
|
// Icon — radially oriented; top items are naturally upside-down
|
||||||
iconBitmaps.getOrNull(index)?.let { bmp ->
|
iconBitmaps.getOrNull(index)?.let { bmp ->
|
||||||
@@ -328,12 +326,23 @@ class CircularWheelView @JvmOverloads constructor(
|
|||||||
canvas.restore()
|
canvas.restore()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Label — same radial rotation
|
// Curved label — same radial orientation as icons.
|
||||||
|
// In the local rotated frame the wheel arc is a circle of radius `labelRadius`
|
||||||
|
// with its centre directly "above" at (0, -labelRadius). A CCW arc through (0,0)
|
||||||
|
// flows rightward at that point, matching the natural reading direction at 6 o'clock.
|
||||||
|
val labelRadius = outerRadius * 0.84f
|
||||||
|
val textX = cx + cosA * labelRadius
|
||||||
|
val textY = cy + sinA * labelRadius
|
||||||
|
val label = items[index].label
|
||||||
textPaint.color = labelColor
|
textPaint.color = labelColor
|
||||||
|
textPaint.textAlign = Paint.Align.LEFT
|
||||||
|
val halfAngleDeg = Math.toDegrees((textPaint.measureText(label) / 2.0) / labelRadius).toFloat()
|
||||||
|
val localArcRect = RectF(-labelRadius, -2f * labelRadius, labelRadius, 0f)
|
||||||
|
val arcPath = Path().apply { addArc(localArcRect, 90f + halfAngleDeg, -(halfAngleDeg * 2f)) }
|
||||||
canvas.save()
|
canvas.save()
|
||||||
canvas.translate(textX, textY)
|
canvas.translate(textX, textY)
|
||||||
canvas.rotate(midDeg - 90f)
|
canvas.rotate(midDeg - 90f)
|
||||||
canvas.drawText(items[index].label, 0f, textPaint.textSize * 0.36f, textPaint)
|
canvas.drawTextOnPath(label, arcPath, 0f, textPaint.textSize * 0.36f, textPaint)
|
||||||
canvas.restore()
|
canvas.restore()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user