相关疑难解决方法(0)

Jetpack Compose 拦截子布局中的捏合/缩放

我想要一个包含行列的框,其中填充了更多子项,这些子项接受单击(“CL”)和长按(“LO”)以进行缩放和拖动。使用pointerInputwithdetectTransforgestures我可以根据需要改变子布局。

var zoom by remember { mutableStateOf(1f) }
var offset by remember { mutableStateOf(Offset.Zero) }

val outer = (1..60).toList().chunked(6)

Box(Modifier
.fillMaxSize()
.pointerInput(Unit) {

    //zoom in/out and move around
    detectTransformGestures { gestureCentroid, gesturePan, gestureZoom, _ ->
        val oldScale = zoom
        val newScale = (zoom * gestureZoom).coerceIn(0.5f..5f)
        offset =
            (offset + gestureCentroid / oldScale) - (gestureCentroid / newScale + gesturePan / oldScale)
        zoom = newScale
    }
}) {

    Box(
        Modifier

            .graphicsLayer {
                translationX = -offset.x * zoom
                translationY …
Run Code Online (Sandbox Code Playgroud)

intercept kotlin pinchzoom android-jetpack-compose android-jetpack-compose-gesture

9
推荐指数
1
解决办法
1347
查看次数

Jetpack Compose - 修饰符顺序

文档说修饰符是从左边应用的。但从这个例子来看,它们似乎是从右侧应用的:首先边框,然后填充,因为文本和边框之间没有空格

Text("Hi there!", Modifier.padding(10.dp).border(2.dp, Color.Magenta))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

android modifier android-jetpack android-jetpack-compose

8
推荐指数
3
解决办法
2449
查看次数

Jetpack Compose:当使用 Modifier.selectable 时,如何防止布局可组合在滚动时被选择?

在 Jetpack Compose 中有一个Modifier名为selectable.

将组件配置为可选择的,通常作为互斥组的一部分,在任何时间点只能选择一个项目。

我将它用于可滚动列表内的互斥无线电组。在我的情况下LazyColumn。这工作正常,单击可选区域会点亮它们并导致检测到点击。但是我注意到在滚动时“触摸”这些区域时该区域也会亮起。

如果您想了解我的意思,我制作了一个可组合的简单示例,只需滚动列表,您就会看到滚动如何触发短选择状态:

@Composable
    fun Example() {
        LazyColumn {
            item {
                repeat(100){
                    Column(
                        modifier = Modifier
                            .fillMaxWidth()
                            .height(40.dp)
                            .selectable(
                                selected = false,
                                onClick = { }
                            )
                    ) {
                        Text("Example")
                    }
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

有没有人想出如何解决某种行为?我尝试在https://developer.android.com/jetpack/compose/gestures寻找任何相关文档,但没有真正解释如何在滚动时“阻止”触摸事件。

android kotlin android-jetpack-compose

6
推荐指数
1
解决办法
522
查看次数

Android Compose 为什么当父级可点击时 Checkbox 需要 onCheckChanged?

我试图有一个带有一些尾随文本的复选框。这个想法是,无论您选择复选框本身还是文本,值都会被切换。为了代码的简洁性,我已经在可组合项中完成了所有操作。

选择文本时它会按预期工作。但是当我专门按下该复选框时,什么也没有发生。我看到按下复选框会产生连锁反应,但它显然忽略了该行的可点击功能并点击onCheckChange = {}

我对可组合作用域并不完全熟悉,所以我认为这可能是由于它Row()是一个内联函数,所以我尝试对 the 应用相同的修饰符,Surface但这也不起作用。

从两个地点打同样的电话没什么大不了的,我只是想知道为什么。

@Composable
fun CheckboxInRowWithText() {
    var checkedState by remember { mutableStateOf(false) }
    Surface {
        Row(
            modifier = Modifier
                .fillMaxWidth()
                .clickable {
                    checkedState = !checkedState
                },
            verticalAlignment = Alignment.CenterVertically) {
            Checkbox(checked = checkedState, onCheckedChange = {} )

            Text(text = "Clicking this Row will toggle checkbox")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose android-jetpack-compose-gesture

2
推荐指数
1
解决办法
2083
查看次数