अगर आपने पहले ही अपने ऐप्लिकेशन को नए सिस्टम बैक एपीआई पर माइग्रेट कर लिया है, तो ऐप्लिकेशन में ऐनिमेशन अपने-आप पाने के लिए, अनुमानित बैक ट्रांज़िशन के लिए ऑप्ट-इन किया जा सकता है. साथ ही, कस्टम ट्रांज़िशन की सुविधा भी इस्तेमाल की जा सकती है.
ऐप्लिकेशन में पहले से मौजूद ऐनिमेशन के लिए सहायता जोड़ना
ऑप्ट-इन करने के बाद, आपका ऐप्लिकेशन होम स्क्रीन पर वापस जाने, एक गतिविधि से दूसरी गतिविधि पर जाने, और एक टास्क से दूसरे टास्क पर जाने के लिए ऐनिमेशन दिखाता है.
कॉन्टेंट कॉम्पोनेंट की डिपेंडेंसी को एमडीसी के v1.10.0 वर्शन पर भी अपग्रेड किया जा सकता है Android को, नीचे दिए गए मटीरियल कॉम्पोनेंट वाले ऐनिमेशन मिलेंगे:
ज़्यादा जानकारी के लिए, GitHub पर मौजूद, मेटल कॉम्पोनेंट के लिए डेवलपर गाइड देखें.
इस वीडियो में, पुराने ऐनिमेशन के पुराने ऐनिमेशन का छोटा सा उदाहरण दिखाया गया है Android Settings ऐप्लिकेशन का इस्तेमाल करके, क्रॉस-ऐक्टिविटी और बैक-टू-होम की सुविधा का इस्तेमाल करता है.
- ऐनिमेशन में, उपयोगकर्ता पिछली सेटिंग स्क्रीन पर वापस जाने के लिए, पीछे की ओर स्वाइप करता है. यह क्रॉस-ऐक्टिविटी ऐनिमेशन का एक उदाहरण है.
- अब उपयोगकर्ता पिछली स्क्रीन पर, दूसरी बार स्वाइप करता है. इससे होम स्क्रीन की झलक दिखती है. इसमें होम स्क्रीन का वॉलपेपर दिखता है. यह होम स्क्रीन पर वापस जाने वाले ऐनिमेशन का उदाहरण है.
- उपयोगकर्ता, स्क्रीन पर दाईं ओर स्वाइप करके, विंडो का ऐनिमेशन दिखा रहा है छोटा करके होम स्क्रीन पर मौजूद आइकॉन तक.
- उपयोगकर्ता अब पूरी तरह से होम स्क्रीन पर वापस आ गया है.
पूर्वानुमान के साथ काम करने के बारे में ज़्यादा पढ़ें.
कस्टम इन-ऐप्लिकेशन ट्रांज़िशन और ऐनिमेशन जोड़ें
इनका इस्तेमाल करके, कस्टम इन-ऐप्लिकेशन प्रॉपर्टी ऐनिमेशन और ट्रांज़िशन बनाए जा सकते हैं
प्रोग्रेस एपीआई और कस्टम क्रॉस-ऐक्टिविटी ऐनिमेशन का तरीका
overrideActivityTransition
.
Progress API का इस्तेमाल करके कस्टम ट्रांज़िशन जोड़ना
AndroidX Activity 1.8.0-alpha01 या इसके बाद के वर्शन के साथ, आप प्रेडिक्टिव बैक का इस्तेमाल कर सकते हैं
प्रोग्रेस एपीआई, जिनके लिए कस्टम ऐनिमेशन तैयार करना है
पिछले पेज पर वापस जाने के जेस्चर की सुविधा. इतने समय में
OnBackPressedCallback
हमने handleOnBackProgressed
, handleOnBackCancelled
, और
जब उपयोगकर्ता पीछे की ओर स्वाइप करता है, तब ऑब्जेक्ट को ऐनिमेट करने के handleOnBackStarted
तरीके. इस्तेमाल की जाने वाली चीज़ें
अगर आपको डिफ़ॉल्ट ऐनिमेशन के मुकाबले ज़्यादा कस्टम जानकारी चाहिए, तो इन तरीकों का इस्तेमाल करें
ये टूल, नए सिस्टम के ऐनिमेशन या मटीरियल कॉम्पोनेंट ऐनिमेशन से मिलते हैं.
हमें उम्मीद है कि ज़्यादातर ऐप्लिकेशन, पुराने सिस्टम के साथ काम करने वाले AndroidX एपीआई का इस्तेमाल करेंगे. हालांकि, Android 14 के डेवलपर के लिए उपलब्ध झलक 1 और इसके बाद के वर्शन में, जांच के लिए OnBackAnimationCallback
इंटरफ़ेस में मिलते-जुलते प्लैटफ़ॉर्म एपीआई भी उपलब्ध हैं.
AndroidX ट्रांज़िशन के साथ Progress API का इस्तेमाल करना
Android 14 और इसके बाद के वर्शन पर, अनुमानित बैक ट्रांज़िशन बनाने के लिए, Progress API का इस्तेमाल AndroidX Transitions 1.5.0-alpha01 या इसके बाद के वर्शन के साथ किया जा सकता है.
- उपयोगकर्ता के वापस स्वाइप करने पर ट्रांज़िशन चलाने के लिए,
beginDelayedTransition
के बजायTransitionManager#controlDelayedTransition
का इस्तेमाल करें. handleOnBackStarted
में ट्रांज़िशन बनाएं.handleOnBackProgressed
में, बैक इवेंट के साथ ट्रांज़िशन चलाएंBackEvent.progress
सेcurrentFraction
से जुड़ी जानकारी जिससे पता चलता है कि कितनी दूर तक जब उपयोगकर्ता ने पीछे की ओर स्वाइप किया हो.- जब उपयोगकर्ता
handleOnBackPressed
में बैक जेस्चर का इस्तेमाल कर ले, तब ट्रांज़िशन पूरा करें. - आखिर में,
handleOnBackCancelled
के अंदर ट्रांज़िशन की स्थिति रीसेट करें.
नीचे दिए गए वीडियो, Kotlin कोड, और एक्सएमएल में कस्टम ट्रांज़िशन को दिखाया गया है
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
को बदलें. - हर ऐनिमेशन के लिए एक कंट्रोलर बनाएं.
- अनुमानित बैक ट्रांज़िशन, AndroidX ट्रांज़िशन के साथ काम करते हैं, लेकिन फ़्रेमवर्क ट्रांज़िशन के साथ नहीं. हमारा सुझाव है कि आप फ़्रेमवर्क से बाहर माइग्रेट करें ट्रांज़िशन हैं.
- अनुमानित बैक ट्रांज़िशन की सुविधा, Android 14 और इसके बाद के वर्शन वाले डिवाइसों पर काम करती है. पुराने सिस्टम के साथ काम नहीं करता.
- एक्सएमएल सीन की मदद से बनाए गए ट्रांज़िशन भी काम करते हैं.
handleOnBackStarted
में,TransitionSeekController
कोcontrolDelayedTransition
के नतीजे के बजाय,TransitionManager.createSeekController
के नतीजे पर सेट करें.
Android 14 और उसके बाद के वर्शन पर, अपनी पसंद के मुताबिक गतिविधि का ट्रांज़िशन जोड़ना
यह पक्का करने के लिए कि कस्टम गतिविधि ट्रांज़िशन, Android 14 के अनुमानित वर्शन के साथ काम करते हों
और बाद के वर्शन का इस्तेमाल करना है, तो आप इसके बजाय overrideActivityTransition
का इस्तेमाल कर सकते हैं
overridePendingTransition
. इसका मतलब है कि जब उपयोगकर्ता वापस स्वाइप करता है, तो ट्रांज़िशन ऐनिमेशन चलता है.
यह कैसे काम कर सकता है, इसका उदाहरण देने के लिए, एक ऐसी स्थिति की कल्पना करें जिसमें ऐक्टिविटी B, बैक स्टैक में ऐक्टिविटी A के ऊपर हो. कस्टम ऐक्टिविटी ऐनिमेशन को इस तरह मैनेज किया जा सकता है:
- गतिविधि B के
onCreate
में, ट्रांज़िशन के किसी भी हिस्से को चालू या बंद करने के लिए कॉल करें तरीका. - जब उपयोगकर्ता गतिविधि B पर जाए, तो
OVERRIDE_TRANSITION_OPEN
का इस्तेमाल करें. जब उपयोगकर्ता गतिविधि A पर वापस जाने के लिए स्वाइप करता है, तोOVERRIDE_TRANSITION_CLOSE
का इस्तेमाल करें. OVERRIDE_TRANSITION_CLOSE
को तय करने पर,enterAnim
, गतिविधि A की वैल्यू होती है ऐनिमेशन डालें औरexitAnim
, गतिविधि B का एग्ज़िट ऐनिमेशन है.