หากย้ายข้อมูลแอปไปยัง API ใหม่ของระบบใหม่แล้ว คุณจะดำเนินการต่อไปนี้ได้ เลือกใช้การคาดการณ์กลับเพื่อรับในแอปโดยอัตโนมัติ ภาพเคลื่อนไหวและรองรับการเปลี่ยนที่กำหนดเอง
เพิ่มการรองรับภาพเคลื่อนไหวในแอป
หลังจากเลือกใช้แล้ว แอปจะแสดงภาพเคลื่อนไหวสำหรับการแสดงกลับบ้าน เล่นข้ามกิจกรรม และข้ามงานพร้อมกัน
คุณยังอัปเกรดทรัพยากร Dependency ของคอมโพเนนต์เป็น v1.10.0 ของ MDC ได้ด้วย Android เพื่อรับภาพเคลื่อนไหวขององค์ประกอบที่เป็นวัสดุดังตัวอย่างต่อไปนี้
ดูคำแนะนำสำหรับนักพัฒนาคอมโพเนนต์ Material ใน GitHub สำหรับข้อมูลเพิ่มเติม
วิดีโอแสดงตัวอย่างสั้นๆ ของภาพเคลื่อนไหวย้อนกลับแบบคาดเดาสำหรับ ข้ามกิจกรรมและกลับไปที่บ้านโดยใช้แอปการตั้งค่าของ Android
- ในภาพเคลื่อนไหว ผู้ใช้จะปัดกลับเพื่อกลับไปยังการตั้งค่าก่อนหน้า ตัวอย่างภาพเคลื่อนไหวข้ามกิจกรรม
- ในหน้าจอก่อนหน้า ผู้ใช้เริ่มปัดกลับเป็นครั้งที่ 2 แสดงตัวอย่างของหน้าจอหลักพร้อมวอลเปเปอร์ ซึ่งเป็นตัวอย่างของ เป็นภาพเคลื่อนไหวที่แสดงที่บ้าน
- ผู้ใช้ยังคงปัดไปทางขวาต่อเพื่อแสดงภาพเคลื่อนไหวของหน้าต่าง ย่อจนเหลือเป็นไอคอนบนหน้าจอหลัก
- ตอนนี้ผู้ใช้ได้กลับไปยังหน้าจอหลักเรียบร้อยแล้ว
อ่านเพิ่มเติมเกี่ยวกับการรองรับการย้อนกลับแบบคาดการณ์
เพิ่มการเปลี่ยนและภาพเคลื่อนไหวในแอปที่กำหนดเอง
คุณสามารถสร้างภาพเคลื่อนไหวและการเปลี่ยนภาพของพร็อพเพอร์ตี้ในแอปที่กำหนดเองได้โดยใช้
Progress API และวิธีการภาพเคลื่อนไหวข้ามกิจกรรมที่กำหนดเอง
overrideActivityTransition
เพิ่มการเปลี่ยนที่กำหนดเองโดยใช้ Progress API
ด้วยกิจกรรม AndroidX 1.8.0-alpha01 ขึ้นไป คุณสามารถใช้การย้อนกลับที่คาดการณ์ได้
Progress API เพื่อพัฒนาภาพเคลื่อนไหวที่กำหนดเองสำหรับ
ท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้ในแอปของคุณ ภายใน
OnBackPressedCallback
เราได้เปิดตัว handleOnBackProgressed
, handleOnBackCancelled
และ
handleOnBackStarted
วิธีทำให้วัตถุเคลื่อนไหวขณะที่ผู้ใช้ปัดกลับ ใช้
หากคุณต้องการบางสิ่งที่กำหนดเองมากกว่าภาพเคลื่อนไหวเริ่มต้น
ที่มาจากภาพเคลื่อนไหวของระบบใหม่หรือภาพเคลื่อนไหวของ Material Component
เราคาดหวังให้แอปส่วนใหญ่ใช้ AndroidX API ที่เข้ากันได้แบบย้อนหลัง แต่ก็มี
API ของแพลตฟอร์มที่คล้ายกันภายใน
OnBackAnimationCallback
พร้อมให้ทดสอบใน Android 14 Developer Preview 1 ขึ้นไป
ใช้ Progress API ที่มีการเปลี่ยน AndroidX
คุณสามารถใช้ Progress API กับ AndroidX Transitions 1.5.0-alpha01 ขึ้นไป ใน Android 14 ขึ้นไปเพื่อสร้างการเปลี่ยนการย้อนกลับที่คาดการณ์ได้
- ใช้
TransitionManager#controlDelayedTransition
แทนbeginDelayedTransition
เพื่อเล่นการเปลี่ยนเป็น ผู้ใช้ปัดกลับ - ดำเนินการเปลี่ยนภายใน
handleOnBackStarted
- เล่นการเปลี่ยนหน้าด้วยเหตุการณ์ย้อนหลังภายใน
handleOnBackProgressed
โดย เกี่ยวข้องกับcurrentFraction
กับBackEvent.progress
ซึ่งแสดงให้เห็นว่า ผู้ใช้ปัดกลับ - ทำการเปลี่ยนให้เสร็จหลังจากที่ผู้ใช้ทำท่าทางสัมผัสเพื่อย้อนกลับแล้ว
handleOnBackPressed
- สุดท้าย ให้รีเซ็ตสถานะของการเปลี่ยนแปลงภายใน
handleOnBackCancelled
วิดีโอต่อไปนี้, โค้ด Kotlin และ XML แสดงการเปลี่ยนแบบกำหนดเอง
ระหว่าง 2 ช่องที่ใช้งานกับ OnBackPressedCallback
:
class MyFragment : Fragment() {
val transitionSet = TransitionSet().apply {
addTransition(Fade(Fade.MODE_OUT))
addTransition(ChangeBounds())
addTransition(Fade(Fade.MODE_IN))
}
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val callback = object : OnBackPressedCallback(enabled = false) {
var controller: TransitionSeekController? = null
@RequiresApi(34)
override fun handleOnBackStarted(backEvent: BackEvent) {
// Create the transition
controller = TransitionManager.controlDelayedTransition(
binding.card,
transitionSet
)
changeTextVisibility(ShowText.SHORT)
}
@RequiresApi(34)
override fun handleOnBackProgressed(backEvent: BackEvent) {
// Play the transition as the user swipes back
if (controller?.isReady == true) {
controller?.currentFraction = backEvent.progress
}
}
override fun handleOnBackPressed() {
// Finish playing the transition when the user commits back
controller?.animateToEnd()
this.isEnabled = false
}
@RequiresApi(34)
override fun handleOnBackCancelled() {
// If the user cancels the back gesture, reset the state
transition(ShowText.LONG)
}
}
binding.shortText.setOnClickListener {
transition(ShowText.LONG)
callback.isEnabled = true
}
this.requireActivity().onBackPressedDispatcher.addCallback(callback)
}
private fun transition(showText: ShowText) {
TransitionManager.beginDelayedTransition(
binding.card,
transitionSet
)
changeTextVisibility(showText)
}
enum class ShowText { SHORT, LONG }
private fun changeTextVisibility(showText: ShowText) {
when (showText) {
ShowText.SHORT -> {
binding.shortText.isVisible = true
binding.longText.isVisible = false
}
ShowText.LONG -> {
binding.shortText.isVisible = false
binding.longText.isVisible = true
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
...
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...>
<TextView
android:id="@+id/short_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
... />
<TextView
android:id="@+id/long_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
.../>
</androidx.constraintlayout.widget.ConstraintLayout>
สิ่งที่ควรทราบเมื่อทำงานกับการเปลี่ยนการย้อนกลับที่คาดการณ์ได้
- ใช้
isSeekingSupported
เพื่อตรวจสอบว่าการเปลี่ยนรองรับการคาดการณ์การย้อนกลับหรือไม่ - ลบล้าง
isSeekingSupported
เพื่อแสดงค่า true สำหรับการเปลี่ยนแบบกำหนดเอง - สร้างตัวควบคุม 1 รายการต่อภาพเคลื่อนไหว
- รองรับการเปลี่ยนกลับแบบคาดเดาได้ กับการเปลี่ยนของ AndroidX แต่ไม่ใช่กับการเปลี่ยนกรอบการทำงาน เราขอแนะนำให้ย้ายข้อมูลออกจากเฟรมเวิร์ก การเปลี่ยนแปลง
- การย้อนกลับที่คาดการณ์ได้รองรับในอุปกรณ์ Android 14 ขึ้นไปและ เข้ากันไม่ได้แบบย้อนหลัง
- นอกจากนี้ยังรองรับการเปลี่ยนภาพที่สร้างด้วยฉาก XML ด้วย ใน
handleOnBackStarted
ตั้งค่าTransitionSeekController
เป็นผลลัพธ์ ของTransitionManager.createSeekController
แทนที่จะเป็นผลลัพธ์ของcontrolDelayedTransition
เพิ่มการเปลี่ยนกิจกรรมที่กำหนดเองใน Android 14 ขึ้นไป
เพื่อให้การเปลี่ยนกิจกรรมที่กำหนดเองรองรับการคาดการณ์กลับมาใช้ใน Android 14
และสูงกว่า คุณสามารถใช้ overrideActivityTransition
แทน
overridePendingTransition
ซึ่งหมายความว่าภาพเคลื่อนไหวการเปลี่ยนจะเล่นเป็น
ผู้ใช้ปัดกลับ
หากต้องการแสดงตัวอย่างของวิธีการทำงาน ให้นึกถึงสถานการณ์ที่ กิจกรรม B จะอยู่ที่ด้านบนของกิจกรรม A ในกลุ่มย้อนกลับ คุณจะต้องจัดการแบบกำหนดเอง ภาพเคลื่อนไหวของกิจกรรมในลักษณะต่อไปนี้
- เรียกการเปลี่ยนเปิดหรือปิดภายใน
onCreate
ของกิจกรรม B - เมื่อผู้ใช้ไปยังกิจกรรม ข ให้ใช้
OVERRIDE_TRANSITION_OPEN
วันและเวลา ผู้ใช้ปัดเพื่อกลับไปที่กิจกรรม A ใช้OVERRIDE_TRANSITION_CLOSE
เมื่อระบุ
OVERRIDE_TRANSITION_CLOSE
enterAnim
คือกิจกรรม A ป้อนภาพเคลื่อนไหวและexitAnim
คือภาพเคลื่อนไหวออกจากกิจกรรม B