sar*_*pta 4 android android-jetpack-compose jetpack-compose-accompanist
我想要实现的是,如果有两个水平寻呼机,那么在将顶部一个向左滑动时,底部水平寻呼机应该向右滑动,反之亦然,已尝试使用 pagerState rollBy 方法,但没有获得所需的输出
首先,您需要确定滚动哪个寻呼机以及哪个寻呼机应该跟随它。这可以用 来完成isScrollInProgress,我在里面使用它derivedStateOf以避免不必要的重新组合。
然后我就跑LaunchedEffect。我按需要的顺序传递一对寻呼机状态,或者将其作为 null 传递key,因此LaunchedEffect在滚动停止/开始时将重新启动。使用snapshotFlow,可以跟踪其计算取决于状态变化的块结果的变化。
PagerState属性currentPage和中有滚动位置信息currentPageOffset。scrollToPage仅采用0..1页面偏移值,但currentPageOffset向后滚动时可以小于零。
假设currentPage = 2和currentPageOffset = -0.1。在这种情况下,我将进入1.9,pagePart并且我需要将其拆分回来以获得1和0.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())
}
}
Run Code Online (Sandbox Code Playgroud)
结果:

| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |