Как измерить размер Coil AsyncImage с помощью ContentScale.Fit после загрузки?

У меня есть Coil AsyncImage в Jetpack Compose, как показано ниже:

    AsyncImage(
      model = imageRequest,
      contentDescription = "Ground plan",
      contentScale = ContentScale.Fit,
      modifier = Modifier.fillMaxWidth()
    )

Он отображает план здания и изменяет его размер на всю ширину экрана, сохраняя при этом соотношение сторон.

У меня есть несколько кнопок, которые я хотел бы разместить на этом плане. Для каждой кнопки у меня есть координаты X и Y, которые указывают, где должна располагаться кнопка, учитывая исходный размер изображения в пикселях.

Как мне получить точный размер и положение изображения внутри этого AsyncImage Composable (т.е. не контейнера) после загрузки, чтобы я мог сдвигать и умножать координаты кнопок и размещать кнопки поверх изображения?

1
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я создал библиотеку , которая возвращает Rect из Bitmap, нарисованного внутри компонуемого изображения, с целью получения Rect из Bitmap, нарисованного вместо целого контейнера, однако она принимает ImageBitmap в качестве параметра, но вы можете легко получить ImageBitmap, как описано в это ответ.

После получения этого прямоугольника вы можете масштабировать rect.start + rectWidth * (positionInBitmp/BitmapWidth), чтобы установить позицию X, то же самое касается и позиции y.

Допустим, вы получили Rect(0,200 1000,1200) и хотите разместить на экране кнопку в растровом формате (2000,2000) с шириной и высотой 4000 пикселей. Результат будет таким:

0 + 1000 * 2000/4000 = 500 пикселей для x

200 + 1000 * 2000/4000 = 700 пикселей для y

и вам также может потребоваться преобразовать px в dp или использовать Modifier.offset{}, который принимает IntOffset.

Вы можете просто скопировать исходный код для расчета Rect, если не хотите импортировать всю библиотеку.

Thracian 05.07.2024 18:13

Другие вопросы по теме