เพิ่มการรองรับภาพเคลื่อนไหวของท่าทางสัมผัสย้อนกลับแบบคาดเดาในตัวและที่กำหนดเอง

หากย้ายข้อมูลแอปไปยัง API ใหม่ของระบบใหม่แล้ว คุณจะดำเนินการต่อไปนี้ได้ เลือกใช้การคาดการณ์กลับเพื่อรับในแอปโดยอัตโนมัติ ภาพเคลื่อนไหวและรองรับการเปลี่ยนที่กำหนดเอง

เพิ่มการรองรับภาพเคลื่อนไหวในแอป

วิดีโอ: ภาพเคลื่อนไหวย้อนกลับแบบคาดการณ์

หลังจากเลือกใช้แล้ว แอปจะแสดงภาพเคลื่อนไหวสำหรับการแสดงกลับบ้าน เล่นข้ามกิจกรรม และข้ามงานพร้อมกัน

คุณยังอัปเกรดทรัพยากร Dependency ของคอมโพเนนต์เป็น v1.10.0 ของ MDC ได้ด้วย Android เพื่อรับภาพเคลื่อนไหวขององค์ประกอบที่เป็นวัสดุดังตัวอย่างต่อไปนี้

ดูคำแนะนำสำหรับนักพัฒนาคอมโพเนนต์ Material ใน GitHub สำหรับข้อมูลเพิ่มเติม

วิดีโอแสดงตัวอย่างสั้นๆ ของภาพเคลื่อนไหวย้อนกลับแบบคาดเดาสำหรับ ข้ามกิจกรรมและกลับไปที่บ้านโดยใช้แอปการตั้งค่าของ Android

  1. ในภาพเคลื่อนไหว ผู้ใช้จะปัดกลับเพื่อกลับไปยังการตั้งค่าก่อนหน้า ตัวอย่างภาพเคลื่อนไหวข้ามกิจกรรม
  2. ในหน้าจอก่อนหน้า ผู้ใช้เริ่มปัดกลับเป็นครั้งที่ 2 แสดงตัวอย่างของหน้าจอหลักพร้อมวอลเปเปอร์ ซึ่งเป็นตัวอย่างของ เป็นภาพเคลื่อนไหวที่แสดงที่บ้าน
  3. ผู้ใช้ยังคงปัดไปทางขวาต่อเพื่อแสดงภาพเคลื่อนไหวของหน้าต่าง ย่อจนเหลือเป็นไอคอนบนหน้าจอหลัก
  4. ตอนนี้ผู้ใช้ได้กลับไปยังหน้าจอหลักเรียบร้อยแล้ว

อ่านเพิ่มเติมเกี่ยวกับการรองรับการย้อนกลับแบบคาดการณ์

เพิ่มการเปลี่ยนและภาพเคลื่อนไหวในแอปที่กำหนดเอง

คุณสามารถสร้างภาพเคลื่อนไหวและการเปลี่ยนภาพของพร็อพเพอร์ตี้ในแอปที่กำหนดเองได้โดยใช้ 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 ขึ้นไปเพื่อสร้างการเปลี่ยนการย้อนกลับที่คาดการณ์ได้

  1. ใช้ TransitionManager#controlDelayedTransition แทน beginDelayedTransition เพื่อเล่นการเปลี่ยนเป็น ผู้ใช้ปัดกลับ
  2. ดำเนินการเปลี่ยนภายใน handleOnBackStarted
  3. เล่นการเปลี่ยนหน้าด้วยเหตุการณ์ย้อนหลังภายใน handleOnBackProgressed โดย เกี่ยวข้องกับ currentFraction กับ BackEvent.progress ซึ่งแสดงให้เห็นว่า ผู้ใช้ปัดกลับ
  4. ทำการเปลี่ยนให้เสร็จหลังจากที่ผู้ใช้ทำท่าทางสัมผัสเพื่อย้อนกลับแล้ว handleOnBackPressed
  5. สุดท้าย ให้รีเซ็ตสถานะของการเปลี่ยนแปลงภายใน 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