Выравнивание текста по правому краю в Canvas с помощью Jetpack ComposeAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Выравнивание текста по правому краю в Canvas с помощью Jetpack Compose

Сообщение Anonymous »

Я хочу нарисовать диаграмму, но не могу выровнять метки по оси Y по правому краю:
Изображение

Код: Выделить всё

@Composable
fun Chart(
min: Double = 0.0,
max: Double = 3823.0,
) {
val textMeasurer = rememberTextMeasurer()

val padding = 40f
val yAxisLabelMaxWidth = textMeasurer.measure(text = "${max.toInt()}").size.width.toFloat()
val yAxisLabelMinWidth = textMeasurer.measure(text = "${min.toInt()}").size.width.toFloat()

Canvas(Modifier.size(100.dp)) {
drawText(
textMeasurer = textMeasurer,
text = "${max.toInt()}",
topLeft = Offset(
x = 0f,
y = padding - textMeasurer.measure(text = "$max").size.height / 2,
),
style = TextStyle(
fontSize = 10.sp,
background = Color.Green,
),
)

drawText(
textMeasurer = textMeasurer,
text = "${min.toInt()}",
topLeft = Offset(
x = yAxisLabelMaxWidth - yAxisLabelMinWidth,
y = size.height - padding - textMeasurer.measure(text = "$min").size.height / 2,
),
style = TextStyle(
fontSize = 10.sp,
background = Color.Green,
),
)
}
}
Всегда происходит сдвиг, когда в min меньше цифр, чем в max. Однако yAxisLabelMaxWidth и yAxisLabelMinWidth имеют хорошее значение. Например, если max имеет 4 цифры, а min только 1, максимальная ширина измеряется в 100 пикселей, а минимальная ширина – 25 пикселей.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ck-compose
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»