Как проверить % видимости Composable? ⇐ Android
-
Anonymous
Как проверить % видимости Composable?
У меня есть Composable, который находится в LazyColumn, но я пытаюсь выполнить проверку видимости из LazyListState, который я использовал использовать это
fun LazyListState.visibleItems(itemVisiblePercentThreshold: Float) = макетИнформация .visibleItemsInfo .фильтр { VisiblePercent(it) >= itemVisiblePercentThreshold } частное развлечение LazyListState.visibilityPercent(info: LazyListItemInfo): Float { val CutTop = maxOf(0, LayoutInfo.viewportStartOffset - info.offset) val CutBottom = maxOf(0, info.offset + info.size - layoutInfo.viewportEndOffset) return maxOf(0f, 100f - (cutTop + CutBottom) * 100f / info.size) } Но теперь я хочу, чтобы это было внутри Composable, поскольку у меня нет доступа к списку, другие функции используют мои Composable, и он может быть внутри LazyList , Surface, что угодно, поэтому я использую onGloballyPositioned, чтобы определить, видно оно или нет, но мне хотелось бы знать, составляет ли оно хотя бы 30 % видно. Есть идеи?
Объяснение
У меня есть @Composable, который я хочу предоставить другим функциям моего приложения, например:
У
Feature1 есть LazyColumn, который печатает свои элементы, но затем они хотят добавить мой @Composable в начало списка, поэтому я хочу знать, когда мой code>@Composable виден (не менее 30%) в этом случае, если он обычно вверху, он всегда должен быть 100% при загрузке списка, но, например, в Feature2 они хотят добавить мой @Composable в середине их списка, поэтому я должен знать, когда он станет видимым, поэтому мне нужен порог для отправки некоторых событий.
Это не всегда будет LazyColumn, поэтому я не знаю, хочу ли я быть прикрепленным к LazyListState, но при необходимости я могу получить LazyListState на моем @Composable.
У меня есть Composable, который находится в LazyColumn, но я пытаюсь выполнить проверку видимости из LazyListState, который я использовал использовать это
fun LazyListState.visibleItems(itemVisiblePercentThreshold: Float) = макетИнформация .visibleItemsInfo .фильтр { VisiblePercent(it) >= itemVisiblePercentThreshold } частное развлечение LazyListState.visibilityPercent(info: LazyListItemInfo): Float { val CutTop = maxOf(0, LayoutInfo.viewportStartOffset - info.offset) val CutBottom = maxOf(0, info.offset + info.size - layoutInfo.viewportEndOffset) return maxOf(0f, 100f - (cutTop + CutBottom) * 100f / info.size) } Но теперь я хочу, чтобы это было внутри Composable, поскольку у меня нет доступа к списку, другие функции используют мои Composable, и он может быть внутри LazyList , Surface, что угодно, поэтому я использую onGloballyPositioned, чтобы определить, видно оно или нет, но мне хотелось бы знать, составляет ли оно хотя бы 30 % видно. Есть идеи?
Объяснение
У меня есть @Composable, который я хочу предоставить другим функциям моего приложения, например:
У
Feature1 есть LazyColumn, который печатает свои элементы, но затем они хотят добавить мой @Composable в начало списка, поэтому я хочу знать, когда мой code>@Composable виден (не менее 30%) в этом случае, если он обычно вверху, он всегда должен быть 100% при загрузке списка, но, например, в Feature2 они хотят добавить мой @Composable в середине их списка, поэтому я должен знать, когда он станет видимым, поэтому мне нужен порог для отправки некоторых событий.
Это не всегда будет LazyColumn, поэтому я не знаю, хочу ли я быть прикрепленным к LazyListState, но при необходимости я могу получить LazyListState на моем @Composable.
Мобильная версия