如何在 Jetpack compose 中检测 Horizo​​ntalPager 中的滑动?

Posted

技术标签:

【中文标题】如何在 Jetpack compose 中检测 Horizo​​ntalPager 中的滑动?【英文标题】:How to detect swipe in HorizontalPager in Jetpack compose? 【发布时间】:2022-01-04 13:39:25 【问题描述】:

我如何在我的HorizontalPager()? 中检测用户何时从一个标签滑动到第二个等等。

val pagerState = rememberPagerState(initialPage = 0)
HorizontalPager(count = TabCategory.values().size, state = pagerState)  index ->
                                Box(
                                    modifier = Modifier
                                        .fillMaxSize()
                                        .background(MaterialTheme.colors.onBackground)
                                ) 
                                    when (TabCategory.values()[index]) 
                                        TabCategory.Opinion ->  
                                        TabCategory.Information ->  
                                        TabCategory.Videos ->  
                                    
                                
                            

【问题讨论】:

【参考方案1】:

在您的视图模型中,创建一个 pagerState 并监控它的 currentPage:

class MyViewModel : ViewModel() 

    val pagerState = PagerState()

    init 
        viewModelScope.launch 
            snapshotFlow  pagerState.currentPage .collect  page ->
                // Page is the index of the page being swiped.
            
        
    

在您的可组合中,使用 pagerState:

HorizontalPager(
  state = myViewModel.pagerState,
)  page ->


【讨论】:

【参考方案2】:

PagerState 有一个 InteractionSource 来跟踪这些内容。 collectIsDraggedAsState 方法返回一个您可以订阅的 State<Boolean>,它通过 .value 公开其当前值。

这似乎测试良好。

@Composable
fun ExampleComposable()
    val pagerState=rememberPagerState()
    val isDragged=pagerState.interactionSource.collectIsDraggedAsState()
    HorizontalPager(count = injector.snippets.size,
    state = pagerState,
    )index->
         MyFancyExampleComposable(index)
         if (isDragged.value)
              respondToPageSwipeOrPartialPageSwipe()
            

     

【讨论】:

以上是关于如何在 Jetpack compose 中检测 Horizo​​ntalPager 中的滑动?的主要内容,如果未能解决你的问题,请参考以下文章

Jetpack Compose ScrollableTabRow 如何调整最小宽度

如何在 Jetpack compose 中制作可重用的组件?

如何在jetpack compose中定义不同的屏幕

在 Jetpack Compose 中单击时如何禁用涟漪效应

如何在 Jetpack Compose 中添加保证金?

如何在 Jetpack Compose 中使用小部件?