Нарисуйте композицию в холст, прежде чем он будет нарисован на экранAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Нарисуйте композицию в холст, прежде чем он будет нарисован на экран

Сообщение Anonymous »

Я создаю Animatedvisibility -like API, который работает на растровом изображении контента для переходов Exe-EXIT. Я использую рекомендуемый способ привлечь контент композиции в растровый карту. И когда видимое состояние меняется с false на True , я хочу получить растровую карту кадра, которую будет нарисовать без фактического привлечения его на экран, опять же, плавное обмена растровой картой для фактического контента.

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

@Composable
fun SomeAnimatedVisibility(
visible: Boolean,
modifier: Modifier = Modifier,
// ...
content: @Composable () -> Unit
) {
val graphicsLayer = rememberGraphicsLayer()
var bounds by remember {
mutableStateOf(Rect.Zero)
}

LaunchedEffect(visible) {
if (graphicsLayer.size.toSize() == Size.Zero) return@LaunchedEffect
val bitmap = graphicsLayer.toImageBitmap().asAndroidBitmap()
.copy(Bitmap.Config.ARGB_8888, false)
// Do something cool with the bitmap
}

Layout(
content = content,
modifier = modifier
.drawWithContent {
graphicsLayer.record {
this@drawWithContent.drawContent()
}
if (visible) {
drawLayer(graphicsLayer)
}
}
.onGloballyPositioned {
bounds = it.boundsInRoot()
},
measurePolicy = { measurables, constraints ->
if (!visible) {
return@Layout layout(0, 0) {}
}
val placeables = measurables.fastMap { it.measure(constraints) }
val maxWidth: Int = placeables.fastMaxBy { it.width }?.width ?: 0
val maxHeight = placeables.fastMaxBy { it.height }?.height ?: 0

layout(maxWidth, maxHeight) {
placeables.fastForEach {
it.place(0, 0)
}
}
}
)
}
Проблема, с которой я сталкиваюсь, заключается в том, что мне обязательно нужно, чтобы контент был нарисован хотя бы один раз, чтобы получить растровое изображение, и если мой композитный состав изначально составлен с Visible = false , пользователь не ожидает, что он будет нарисован или имеет какой -либо размер. Более того, даже если бы он был изначально видим, и у нас есть сохраненная растровая карта, состояние, с помощью которого содержимое будет нарисовано, могло бы уже измениться, и сохраненный растровый карта не может быть репрезентативным для фактического содержания, который будет виден при обмене Bitmap
, я также попробовал все возможное, но в Bitmap> inposeeree -vired intosire -virede intosire -viredible intesire -virece in inposeeree in inposeeree in in in in in inposeeree in inposeeree- он всегда измеряет с шириной 0 и высотой.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... -to-screen
Ответить

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

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

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

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

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