เมื่อใช้ API ของการย้อนกลับของระบบ คุณสามารถเลือกรับภาพเคลื่อนไหวในแอปและ รองรับการเปลี่ยนฉากที่กำหนดเองได้
หลังจากเลือกใช้แล้ว แอปจะแสดงภาพเคลื่อนไหวสำหรับการกลับไปหน้าแรก กิจกรรมข้ามแอป และงานข้ามแอป
วิดีโอแสดงตัวอย่างสั้นๆ ของภาพเคลื่อนไหวการย้อนกลับแบบคาดการณ์สำหรับ การข้ามกิจกรรมและการกลับไปที่หน้าแรกโดยใช้แอปการตั้งค่า Android
- ในภาพเคลื่อนไหว ผู้ใช้จะปัดกลับเพื่อกลับไปที่หน้าจอการตั้งค่าก่อนหน้า ซึ่งเป็นตัวอย่างของภาพเคลื่อนไหวข้ามกิจกรรม
- ตอนนี้ในหน้าจอก่อนหน้า ผู้ใช้เริ่มปัดกลับเป็นครั้งที่ 2 แสดงตัวอย่างหน้าจอหลักพร้อมวอลเปเปอร์ ซึ่งเป็นตัวอย่างของ ภาพเคลื่อนไหวกลับไปที่หน้าแรก
- ผู้ใช้ปัดไปทางขวาต่อ โดยแสดงภาพเคลื่อนไหวของหน้าต่างที่ หดเล็กลงเป็นไอคอนบนหน้าจอหลัก
- ตอนนี้ผู้ใช้กลับไปที่หน้าจอหลักได้แล้ว
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเพิ่มการรองรับท่าทางสัมผัสย้อนกลับแบบคาดการณ์
เพิ่มการเปลี่ยนภาพและภาพเคลื่อนไหวในแอปที่กำหนดเอง
คุณสามารถสร้างภาพเคลื่อนไหวและการเปลี่ยนพร็อพเพอร์ตี้ในแอปที่กำหนดเอง ภาพเคลื่อนไหวข้ามกิจกรรมที่กำหนดเอง และภาพเคลื่อนไหวข้าม Fragment ที่กำหนดเองด้วยท่าทางสัมผัสการย้อนกลับแบบคาดการณ์
เพิ่มการเปลี่ยนฉากที่กำหนดเองใน Jetpack Compose
คุณสามารถใช้ PredictiveBackHandler เพื่อจัดการท่าทางสัมผัสย้อนกลับแบบคาดการณ์ใน
Jetpack Compose เพื่อสร้างการเปลี่ยนผ่านในแอปที่กำหนดเองได้ ฟีเจอร์นี้ใช้ได้ใน androidx.activity:activity-compose:1.8.0-alpha01 ขึ้นไป
PredictiveBackHandler มี Lambda เรียกกลับที่แสดง
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(x = xOffset.dp, y = 0.dp), color = Color.Blue ) {} } }