gpt4 book ai didi

android - 有什么办法可以让伴奏库的两个水平寻呼机同步工作?

转载 作者:行者123 更新时间:2023-12-04 23:57:18 25 4
gpt4 key购买 nike

我想要实现的是,如果有两个水平寻呼机,那么在向左滑动顶部一个然后底部水平寻呼机应该向右滑动,反之亦然,尝试使用 pagerState scrollBy 方法但没有获得所需的输出

最佳答案

首先,您需要确定滚动哪个寻呼机以及应该跟随哪个寻呼机。这可以通过 isScrollInProgress 来完成,我在derivedStateOf里面使用以避免不必要的重新组合。
然后我运行 LaunchedEffect .我正在按需要的顺序传递一对寻呼机状态,或者为 null,作为 key , 所以 LaunchedEffect滚动停止/开始时将重新启动。使用 snapshotFlow ,可以跟踪其计算取决于状态变化的 block 的结果变化。PagerState在属性 currentPage 中有滚动位置信息和 currentPageOffset . scrollToPage只需要 0..1页偏移量的值,但 currentPageOffset向后滚动时可以小于零。
假设 currentPage = 2currentPageOffset = -0.1 .在这种情况下,我会得到 1.9pagePart , 我需要把它拆分回来得到 10.9 .为此,我使用 divideAndRemainder : 它将返回 listOf(1.0, 0.9) 形式的列表.

Column {
val count = 10
val firstPagerState = rememberPagerState()
val secondPagerState = rememberPagerState()

val scrollingFollowingPair by remember {
derivedStateOf {
if (firstPagerState.isScrollInProgress) {
firstPagerState to secondPagerState
} else if (secondPagerState.isScrollInProgress) {
secondPagerState to firstPagerState
} else null
}
}
LaunchedEffect(scrollingFollowingPair) {
val (scrollingState, followingState) = scrollingFollowingPair ?: return@LaunchedEffect
snapshotFlow { scrollingState.currentPage + scrollingState.currentPageOffset }
.collect { pagePart ->
val divideAndRemainder = BigDecimal.valueOf(pagePart.toDouble())
.divideAndRemainder(BigDecimal.ONE)

followingState.scrollToPage(
divideAndRemainder[0].toInt(),
divideAndRemainder[1].toFloat(),
)
}
}

HorizontalPager(
count = count,
state = firstPagerState,
modifier = Modifier.weight(1f)
) {
Text(it.toString())
}
HorizontalPager(
count = count,
state = secondPagerState,
modifier = Modifier.weight(1f)
) {
Text(it.toString())
}
}
结果:

关于android - 有什么办法可以让伴奏库的两个水平寻呼机同步工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70458058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com