返回

Compose 手势:轻松处理各种触摸事件

Android

Compose 手势入门

Compose 提供了丰富的 API,可让您轻松检测和处理各种手势。这些 API 主要集中在 Modifier 类和 GestureDetector 类中。

Modifier.clickable():处理点击事件

Modifier.clickable() 修饰符可让您将某个组件标记为可点击。当用户点击该组件时,您可以在回调函数中执行相应的操作。

// 定义一个可点击的文本组件
val textModifier = Modifier.clickable {
    // 当用户点击文本时执行此操作
    Toast.makeText(context, "你点击了文本!", Toast.LENGTH_SHORT).show()
}

// 将修饰符应用到文本组件
Text(text = "点击我", modifier = textModifier)

GestureDetector:处理复杂手势

GestureDetector 类可让您检测和处理更复杂的手势,例如拖拽、缩放、双击等。

// 创建一个 GestureDetector 实例
val gestureDetector = GestureDetector(
    // 定义手势检测器要监听的手势
    onTap = {
        // 当用户点击屏幕时执行此操作
        Toast.makeText(context, "你点击了屏幕!", Toast.LENGTH_SHORT).show()
    },
    onDoubleTap = {
        // 当用户双击屏幕时执行此操作
        Toast.makeText(context, "你双击了屏幕!", Toast.LENGTH_SHORT).show()
    },
    onDrag = { dx, dy ->
        // 当用户在屏幕上拖动时执行此操作
        Log.d("GestureDetector", "x: $dx, y: $dy")
    }
)

// 将手势检测器应用到某个组件
Box(
    modifier = Modifier.gestureDetector(gestureDetector)
) {
    // 组件的内容
}

Compose 手势进阶

除了基本的点击和拖拽手势外,Compose 还支持一些更高级的手势,例如缩放、旋转、长按等。这些手势需要您使用 ScaleGestureDetectorRotationGestureDetectorLongPressGestureDetector 等类来检测。

ScaleGestureDetector:处理缩放手势

// 创建一个 ScaleGestureDetector 实例
val scaleGestureDetector = ScaleGestureDetector(
    // 定义缩放手势检测器要监听的手势
    onScale = { scaleFactor, focalX, focalY ->
        // 当用户缩放屏幕时执行此操作
        Log.d("ScaleGestureDetector", "缩放因子:$scaleFactor")
    }
)

// 将缩放手势检测器应用到某个组件
Box(
    modifier = Modifier.scaleGestureDetector(scaleGestureDetector)
) {
    // 组件的内容
}

RotationGestureDetector:处理旋转手势

// 创建一个 RotationGestureDetector 实例
val rotationGestureDetector = RotationGestureDetector(
    // 定义旋转手势检测器要监听的手势
    onRotation = { angle, focalX, focalY ->
        // 当用户旋转屏幕时执行此操作
        Log.d("RotationGestureDetector", "旋转角度:$angle")
    }
)

// 将旋转手势检测器应用到某个组件
Box(
    modifier = Modifier.rotationGestureDetector(rotationGestureDetector)
) {
    // 组件的内容
}

LongPressGestureDetector:处理长按手势

// 创建一个 LongPressGestureDetector 实例
val longPressGestureDetector = LongPressGestureDetector(
    // 定义长按手势检测器要监听的手势
    onLongPress = {
        // 当用户长按屏幕时执行此操作
        Toast.makeText(context, "你长按了屏幕!", Toast.LENGTH_SHORT).show()
    }
)

// 将长按手势检测器应用到某个组件
Box(
    modifier = Modifier.longPressGestureDetector(longPressGestureDetector)
) {
    // 组件的内容
}

结语

Compose 的手势 API 非常丰富,能够满足您在应用程序中处理各种手势的需求。通过合理使用这些 API,您可以构建出流畅、直观、富有交互性的用户界面。