เมื่อใช้ API ย้อนกลับของระบบ คุณเลือกรับภาพเคลื่อนไหวในแอปและรองรับการเปลี่ยนภาพที่กำหนดเองได้
หลังจากเลือกใช้แล้ว แอปจะแสดงภาพเคลื่อนไหวสำหรับการกลับไปที่หน้าแรก การข้ามกิจกรรม และการข้ามงาน
วิดีโอแสดงตัวอย่างสั้นๆ ของภาพเคลื่อนไหวการย้อนกลับที่คาดการณ์ได้สำหรับการข้ามกิจกรรมและการกลับไปที่หน้าแรกโดยใช้แอปการตั้งค่าของ Android
- ในภาพเคลื่อนไหว ผู้ใช้ปัดกลับเพื่อกลับไปที่หน้าจอการตั้งค่าก่อนหน้า ซึ่งเป็นตัวอย่างของภาพเคลื่อนไหวการข้ามกิจกรรม
- ตอนนี้อยู่ในหน้าจอก่อนหน้า ผู้ใช้เริ่มปัดกลับเป็นครั้งที่ 2 ซึ่งแสดงตัวอย่างหน้าจอหลักพร้อมวอลเปเปอร์ ซึ่งเป็นตัวอย่างของภาพเคลื่อนไหวการกลับไปที่หน้าแรก
- ผู้ใช้ปัดไปทางขวาต่อ ซึ่งแสดงภาพเคลื่อนไหวของหน้าต่างที่เล็กลงจนเหลือไอคอนบนหน้าจอหลัก
- ตอนนี้ผู้ใช้กลับไปที่หน้าจอหลักอย่างสมบูรณ์แล้ว
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเพิ่มการรองรับท่าทางสัมผัสการย้อนกลับแบบคาดการณ์
เพิ่มการเปลี่ยนภาพและภาพเคลื่อนไหวในแอปที่กำหนดเอง
คุณสามารถสร้างภาพเคลื่อนไหวและการเปลี่ยนภาพพร็อพเพอร์ตี้ในแอปที่กำหนดเอง ภาพเคลื่อนไหวการข้ามกิจกรรมที่กำหนดเอง และภาพเคลื่อนไหวการข้าม Fragment ที่กำหนดเองด้วยท่าทางสัมผัสการย้อนกลับแบบคาดการณ์
เพิ่มการเปลี่ยนภาพที่กำหนดเองใน Jetpack Compose
คุณสามารถใช้ PredictiveBackHandler เพื่อจัดการท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ใน Jetpack Compose สำหรับการสร้างการเปลี่ยนภาพในแอปที่กำหนดเอง ฟีเจอร์นี้พร้อมใช้งานใน androidx.activity:activity-compose:1.8.0-alpha01 ขึ้นไป
PredictiveBackHandler มีแลมบ์ดาการเรียกกลับที่แสดง
Flow<BackEventCompat> ซึ่งจะปล่อยเหตุการณ์เมื่อผู้ใช้ปัดกลับจาก
ขอบ
เหตุการณ์เหล่านี้ให้ข้อมูลเกี่ยวกับตำแหน่งสัมผัสของผู้ใช้ ขอบการปัด และที่สำคัญที่สุดคือ progress ซึ่งสามารถใช้เพื่อทำให้คอมโพเนนต์เคลื่อนออกไปเป็นส่วนหนึ่งของการจัดการท่าทางสัมผัสการย้อนกลับ
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการใช้ PredictiveBackHandler เพื่อทำให้ Surface เล็กลงและเคลื่อนออกไปตามความคืบหน้าของท่าทางสัมผัส
@Composable fun DetailScreen(onBack: () -> Unit) { var scale by remember { mutableFloatStateOf(1f) } var xOffset by remember { mutableFloatStateOf(0f) } val scope = rememberCoroutineScope() PredictiveBackHandler { progressFlow -> try { progressFlow.collectLatest { backEvent -> scale = 1f - backEvent.progress xOffset = backEvent.progress * 100f } // User completed gesture. onBack() } catch (e: CancellationException) { // User cancelled gesture. // Animate scale and xOffset back to 1f and 0f respectively. scope.launch { animate(scale, 1f) { value, _ -> scale = value } } scope.launch { animate(xOffset, 0f) { value, _ -> xOffset = value } } } } Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Surface( modifier = Modifier .size(200.dp) .scale(scale) .offset { IntOffset(x = xOffset.dp.roundToPx(), y = 0) }, color = Color.Blue ) {} } }