У меня есть Coil AsyncImage в Jetpack Compose, как показано ниже:
AsyncImage(
model = imageRequest,
contentDescription = "Ground plan",
contentScale = ContentScale.Fit,
modifier = Modifier.fillMaxWidth()
)
Он отображает план здания и изменяет его размер на всю ширину экрана, сохраняя при этом соотношение сторон.
У меня есть несколько кнопок, которые я хотел бы разместить на этом плане. Для каждой кнопки у меня есть координаты X и Y, которые указывают, где должна располагаться кнопка, учитывая исходный размер изображения в пикселях.
Как мне получить точный размер и положение изображения внутри этого AsyncImage Composable (т.е. не контейнера) после загрузки, чтобы я мог сдвигать и умножать координаты кнопок и размещать кнопки поверх изображения?
Я создал библиотеку , которая возвращает 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, если не хотите импортировать всю библиотеку.