draggable
ตัวแก้ไขคือจุดแรกเข้าระดับสูงที่จะลากท่าทางสัมผัสในการวางแนวเดียว
และรายงานระยะทางการลากเป็นพิกเซล
โปรดทราบว่าตัวแก้ไขนี้คล้ายกับ scrollable
ตรงที่
ตรวจจับเฉพาะท่าทางสัมผัสเท่านั้น คุณต้องคงสถานะไว้และแสดงบนหน้าจอ
ตัวอย่างเช่น การย้ายองค์ประกอบผ่าน
offset
ตัวปรับแต่ง:
@Composable private fun DraggableText() { var offsetX by remember { mutableStateOf(0f) } Text( modifier = Modifier .offset { IntOffset(offsetX.roundToInt(), 0) } .draggable( orientation = Orientation.Horizontal, state = rememberDraggableState { delta -> offsetX += delta } ), text = "Drag me!" ) }
หากต้องการควบคุมท่าทางสัมผัสการลากทั้งหมด ให้ลองใช้การลาก
ตัวตรวจจับท่าทางสัมผัสแทน ผ่าน
pointerInput
แป้นกดร่วม
@Composable private fun DraggableTextLowLevel() { Box(modifier = Modifier.fillMaxSize()) { var offsetX by remember { mutableStateOf(0f) } var offsetY by remember { mutableStateOf(0f) } Box( Modifier .offset { IntOffset(offsetX.roundToInt(), offsetY.roundToInt()) } .background(Color.Blue) .size(50.dp) .pointerInput(Unit) { detectDragGestures { change, dragAmount -> change.consume() offsetX += dragAmount.x offsetY += dragAmount.y } } ) } }
การเลื่อน
swipeable
ตัวแก้ไขช่วยให้คุณลากองค์ประกอบต่างๆ ซึ่งเมื่อปล่อยแล้วจะเคลื่อนไหวไปยัง
จุดยึดสองจุดขึ้นไปที่กำหนดไว้ในการวางแนว การใช้งานทั่วไปในกรณีนี้คือ
เพื่อใช้รูปแบบ "ปัดเพื่อปิด"
สิ่งสำคัญที่ควรทราบคือตัวแก้ไขนี้จะไม่ย้ายองค์ประกอบ เพียงแต่ย้ายองค์ประกอบ
ตรวจจับท่าทางสัมผัส คุณต้องคงสถานะไว้และแสดงบนหน้าจอโดย
เช่น การย้ายองค์ประกอบผ่าน
offset
แป้นกดร่วม
ต้องมีสถานะแบบปัดได้ในตัวปรับแต่ง swipeable
และจะสร้างได้
และจดจำด้วย
rememberSwipeableState()
สถานะนี้ยังให้วิธีการที่เป็นประโยชน์ในการสร้างภาพเคลื่อนไหวแบบเป็นโปรแกรม
Anchor (ดู
snapTo
animateTo
,
performFling
,
และ
performDrag
)
รวมถึงพร็อพเพอร์ตี้ต่างๆ สำหรับดูความคืบหน้าของการลากด้วย
ท่าทางสัมผัสการปัดสามารถกำหนดค่าให้มีประเภทเกณฑ์ที่แตกต่างกันได้ เช่น
FixedThreshold(Dp)
และ
FractionalThreshold(Float)
,
และสามารถแตกต่างกันไปตามจุดยึดแต่ละจุด
เพื่อให้มีความยืดหยุ่นมากขึ้น คุณสามารถกำหนดค่า resistance
เมื่อเลื่อนผ่าน
ขอบเขต รวมถึง velocityThreshold
ซึ่งจะเคลื่อนไหวการปัดไปยัง
ไปยังสถานะถัดไป แม้ว่าจะยังไม่ถึงตำแหน่ง thresholds
@OptIn(ExperimentalMaterialApi::class) @Composable private fun SwipeableSample() { val width = 96.dp val squareSize = 48.dp val swipeableState = rememberSwipeableState(0) val sizePx = with(LocalDensity.current) { squareSize.toPx() } val anchors = mapOf(0f to 0, sizePx to 1) // Maps anchor points (in px) to states Box( modifier = Modifier .width(width) .swipeable( state = swipeableState, anchors = anchors, thresholds = { _, _ -> FractionalThreshold(0.3f) }, orientation = Orientation.Horizontal ) .background(Color.LightGray) ) { Box( Modifier .offset { IntOffset(swipeableState.offset.value.roundToInt(), 0) } .size(squareSize) .background(Color.DarkGray) ) } }
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- ทำความเข้าใจท่าทางสัมผัส
- ตัวอย่างภาพเคลื่อนไหวขั้นสูง: ท่าทางสัมผัส {:#gesture-and-animation}
- ภาพเคลื่อนไหวตามมูลค่า