【问题标题】:Kotlin Jetpack Compose DragGesture property cancel the scrolling of my ViewKotlin Jetpack Compose DragGesture 属性取消我的视图的滚动
【发布时间】:2022-07-02 06:05:36
【问题描述】:

我是 jetpack compose 的新手,我真的很喜欢它。但是遇到了一个问题:我想知道我的视图是向上还是向下滑动,所以我创建了一个包含一些项目的 LazyColumn 以便能够滚动某些内容。它工作正常,但我想访问 Gesture 属性以了解视图是向下滚动还是向上滚动,这是我的代码:

LazyColumn{
            items (100){
                Text(
                    text = "Item $it",
                    fontSize = 24.sp,
                    textAlign = TextAlign.Center,
                    modifier = Modifier
                        .fillMaxSize()
                        .padding(vertical = 24.dp)
                        .pointerInput(Unit) {
                        detectDragGestures { change, dragAmount ->
                            //change.consumeAllChanges()// i don't know if this does something, i tried to remove it
                            println("detectDragGestures")
                            val (x, y) = dragAmount
                            if(abs(x) < abs(y)){
                                if (y > 0)
                                    println("drag down")
                                else
                                    println("drag Up")
                            }
                        }
                    })
                }
            }

这项工作,我可以检测视图是向下还是向上滚动,问题是当我点击项目并滚动时,我得到正确的打印但视图没有滚动,我必须在项目之间单击才能可以滚动。

我真的不知道 jetpack compose 中的手势是如何工作的,但我想在不妨碍滚动视图的情况下获得滑动的方向。

【问题讨论】:

    标签: kotlin android-jetpack-compose draggable swipe gesture


    【解决方案1】:

    我设法使用 Column 而不是 LazyColumn 来检测滚动方向。

    我希望它能带领你。

    @Composable
    fun ScrollDetect() {
        val scrollState = rememberScrollState()
        var dragPosition by remember {
            mutableStateOf(0)
        }
        LaunchedEffect(key1 = scrollState.value, block = {
            if (scrollState.value > dragPosition)
                Log.e("dragging", "up")
            else
                Log.e("dragging", "down")
            dragPosition = scrollState.value
    
        })
        Column(
            modifier = Modifier
                .verticalScroll(scrollState)
        )
        {
            repeat(100) {
                Text(
                    text = "Item $it",
                    fontSize = 24.sp,
                    textAlign = TextAlign.Center,
                    modifier = Modifier
                        .fillMaxSize()
                        .padding(vertical = 24.dp)
    
                )
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-02
      • 2021-05-26
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 2021-08-13
      相关资源
      最近更新 更多