Отслеживайте, находится ли компоновка в центре экранаAndroid

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

Сообщение Anonymous »

Привет всем, я пытаюсь отследить, находится ли компонуемый объект в центре экрана.
У меня есть **LazyColumn ** с большим количеством контента (элементы могут иметь разных типов и размеров). Недавно мне дали задачу отследить, находится ли видео (часть компонента **Post**) в центре экрана и в зависимости от этого воспроизвести его или остановить.
Поскольку для видео используются AndroidView и android.media3.ui.PlayerView, я решил использовать ViewTreeObserver.OnGlobalLayoutListener, и он вроде производительность не упала и прокрутка достаточно плавная.
А можно ли в Compose сделать так, чтобы производительность не падала?
На данный момент у меня есть такая реализация:

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

AndroidView(
modifier = modifier.
onGloballyPositioned { coordinates ->
val position = coordinates.positionInWindow()
val start = position.y.roundToInt()
val end = coordinates.size.height + start
if (screenCenter in start..end) {
exoPlayer.play()
} else {
exoPlayer.pause()
}
},
factory = { viewContext ->
PlayerView(viewContext).apply {
player = exoPlayer
resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIXED_WIDTH}
}
)
И прокрутка кажется менее плавной, чем ViewTreeObserver.OnGlobalLayoutListener, есть ли способ ее улучшить? Может я что-то не так делаю?

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

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

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

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

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

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