ऐनिमेशन का इस्तेमाल करके कोई गतिविधि शुरू करना

मटीरियल डिज़ाइन ऐप्लिकेशन में ऐक्टिविटी ट्रांज़िशन, दोनों के बीच विज़ुअल कनेक्शन उपलब्ध कराते हैं एक जैसी चीज़ों में गति और रूपांतरण के ज़रिए अलग-अलग अवस्थाएं होती हैं. आप प्रवेश और निकास ट्रांज़िशन के लिए और गतिविधियों के बीच शेयर किए गए एलिमेंट का ट्रांज़िशन.

पहली इमेज. ऐप्लिकेशन साझा तत्वों के साथ ट्रांज़िशन करें.

  • Enter ट्रांज़िशन तय करता है कि किसी गतिविधि में व्यू कैसे दिखेंगे सीन में जाएं. उदाहरण के लिए, explode ट्रांज़िशन में, बाहर से दृश्य प्रवेश करते हैं और स्क्रीन.
  • बाहर निकलने के ट्रांज़िशन से यह तय होता है कि किसी गतिविधि के एग्ज़िट होने पर व्यू कैसे दिखेंगे आस-पास मौजूद नहीं है. उदाहरण के लिए, explode एग्ज़िट ट्रांज़िशन में, व्यू सीन को बीच से बाहर निकालें.
  • शेयर किए गए एलिमेंट ट्रांज़िशन तय करता है कि इन गतिविधियों के बीच दो गतिविधियों के बीच ट्रांज़िशन शेयर किया जाता है. उदाहरण के लिए, अगर दो गतिविधियों की अलग-अलग जगहों और साइज़ में एक ही इमेज है, तो शेयर किए गए changeImageTransform एलिमेंट का ट्रांज़िशन अनुवाद करता है और इन गतिविधियों के बीच चित्र को आसानी से मापता है.

Android पर ये ट्रांज़ैक्शन और एग्ज़िट ट्रांज़िशन काम करते हैं:

  • explode: यह व्यू को सीन के बीच में या उससे बाहर ले जाता है.
  • slide: यह व्यू को व्यू के किसी एक किनारे से अंदर या बाहर ले जाता है सीन.
  • fade: सीन में बदलाव करके, किसी व्यू को जोड़ता या हटाता है अपारदर्शिता.

Visibility क्लास को बढ़ाने वाला कोई भी ट्रांज़िशन, एंट्री या एग्ज़िट ट्रांज़िशन के तौर पर काम करता है. ज़्यादा जानकारी के लिए, एपीआई का रेफ़रंस देखें Transition अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है क्लास.

Android पर ये शेयर किए गए एलिमेंट ट्रांज़िशन भी काम करते हैं:

  • changeBounds: लक्ष्य की लेआउट सीमाओं में बदलावों को ऐनिमेट करता है देखे जाने की संख्या.
  • changeClipBounds: टारगेट की क्लिप की सीमाओं में बदलावों को ऐनिमेट करता है देखे जाने की संख्या.
  • changeTransform: इसके स्केल और रोटेशन में होने वाले बदलावों को ऐनिमेट करता है टारगेट व्यू.
  • changeImageTransform: इसके आकार और स्केल में बदलावों को ऐनिमेट करता है टारगेट इमेज.

जब अपने ऐप्लिकेशन में गतिविधि के ट्रांज़िशन को चालू किया जाता है, तो डिफ़ॉल्ट रूप से क्रॉस-फ़ेडिंग की सुविधा काम करती है. एंट्री और एग्ज़िट के बीच ट्रांज़िशन चालू हो जाता है.

दूसरा डायग्राम. शेयर किए गए एक एलिमेंट के साथ सीन ट्रांज़िशन.

शेयर किए गए एलिमेंट का इस्तेमाल करके अलग-अलग गतिविधियों में ऐनिमेट होने वाले सैंपल कोड को देखने के लिए, देखें ActivityScenetransit Basic पर जाएं.

सिस्टम वर्शन देखें

ऐक्टिविटी ट्रांज़िशन एपीआई, Android 5.0 (एपीआई 21) और इसके बाद वाले वर्शन पर उपलब्ध हैं. Android के पुराने वर्शन के साथ काम करना जारी रखने के लिए, version सिस्टम से पहले रनटाइम में ऐसा हुआ इनमें से किसी भी सुविधा के लिए एपीआई शुरू करें:

Kotlin

// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // Apply activity transition
} else {
    // Swap without transition
}

Java

// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // Apply activity transition
} else {
    // Swap without transition
}

अपनी पसंद के मुताबिक ट्रांज़िशन तय करना

सबसे पहले, android:windowActivityTransitions की मदद से विंडो कॉन्टेंट के ट्रांज़िशन को चालू करें एट्रिब्यूट का इस्तेमाल करें. यह भी बताया जा सकता है कि अपनी स्टाइल परिभाषा में डालें, बाहर निकलें, और शेयर किए गए एलिमेंट ट्रांज़िशन करें:

<style name="BaseAppTheme" parent="android:Theme.Material">
  <!-- enable window content transitions -->
  <item name="android:windowActivityTransitions">true</item>

  <!-- specify enter and exit transitions -->
  <item name="android:windowEnterTransition">@transition/explode</item>
  <item name="android:windowExitTransition">@transition/explode</item>

  <!-- specify shared element transitions -->
  <item name="android:windowSharedElementEnterTransition">
    @transition/change_image_transform</item>
  <item name="android:windowSharedElementExitTransition">
    @transition/change_image_transform</item>
</style>

इस उदाहरण में, change_image_transform ट्रांज़िशन के बारे में इस तरह से बताया गया है:

<!-- res/transition/change_image_transform.xml -->
<!-- (see also Shared Transitions below) -->
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
  <changeImageTransform/>
</transitionSet>

changeImageTransform एलिमेंट ChangeImageTransform क्लास. ज़्यादा जानकारी के लिए, एपीआई देखें Transition के लिए संदर्भ.

इसके बजाय, अपने कोड में विंडो कॉन्टेंट के ट्रांज़िशन को चालू करने के लिए, Window.requestFeature() फ़ंक्शन:

Kotlin

// Inside your activity (if you did not enable transitions in your theme)
with(window) {
    requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)

    // Set an exit transition
    exitTransition = Explode()
}

Java

// Inside your activity (if you did not enable transitions in your theme)
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);

// Set an exit transition
getWindow().setExitTransition(new Explode());

अपने कोड में ट्रांज़िशन बताने के लिए, इन फ़ंक्शन को Transition ऑब्जेक्ट:

setExitTransition() और setSharedElementExitTransition() फ़ंक्शन एग्ज़िट को परिभाषित करता है कॉल की गतिविधि के लिए ट्रांज़िशन करें. setEnterTransition() और setSharedElementEnterTransition() फ़ंक्शन, Enter ट्रांज़िशन किया गया है.

ट्रांज़िशन का पूरा असर पाने के लिए, आपको विंडो कॉन्टेंट चालू करना होगा कॉल और कॉल की गई गतिविधियों, दोनों पर ट्रांज़िशन लागू होते हैं. अगर ऐसा नहीं है, तो गतिविधि से बाहर निकलने का ट्रांज़िशन शुरू होता है, लेकिन इसके बाद आपको ट्रांज़िशन—जैसे कि स्केल या फ़ेड.

जल्द से जल्द एंटर ट्रांज़िशन शुरू करने के लिए, Window.setAllowEnterTransitionOverlap() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है फ़ंक्शन किया जा सकता है. इससे आपको ट्रांज़िशन को और ज़्यादा नाटकीय बनाने में मदद मिलती है.

ट्रांज़िशन का इस्तेमाल करके कोई गतिविधि शुरू करना

अगर आपने ट्रांज़िशन चालू किया है और किसी गतिविधि के लिए, एग्ज़िट ट्रांज़िशन सेट किया है, तो ट्रांज़िशन इस तरह से चालू हो जाता है:

Kotlin

startActivity(intent,
              ActivityOptions.makeSceneTransitionAnimation(this).toBundle())

Java

startActivity(intent,
              ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

अगर दूसरी गतिविधि के लिए एंट्री ट्रांज़िशन सेट किया जाता है, तो वह ट्रांज़िशन भी गतिविधि शुरू होने पर चालू हो जाता है. शुरू करने पर, ट्रांज़िशन बंद करने के लिए किसी दूसरी गतिविधि के लिए, null विकल्पों का बंडल दें.

किसी शेयर किए गए एलिमेंट के साथ गतिविधि शुरू करना

ऐसी दो गतिविधियों के बीच स्क्रीन ट्रांज़िशन ऐनिमेशन बनाने के लिए जिनमें शेयर किए गए एलिमेंट का इस्तेमाल करने के लिए, ये काम करें:

  1. अपनी थीम में विंडो कॉन्टेंट ट्रांज़िशन को चालू करें.
  2. अपनी स्टाइल में शेयर किए गए एलिमेंट का ट्रांज़िशन तय करें.
  3. अपने ट्रांज़िशन को एक्सएमएल संसाधन के तौर पर तय करें.
  4. शेयर किए गए एलिमेंट को कोई नाम असाइन करें. android:transitionName एट्रिब्यूट की वैल्यू सबमिट करें.
  5. ActivityOptions.makeSceneTransitionAnimation() फ़ंक्शन का इस्तेमाल करें.

Kotlin

// Get the element that receives the click event
val imgContainerView = findViewById<View>(R.id.img_container)

// Get the common element for the transition in this activity
val androidRobotView = findViewById<View>(R.id.image_small)

// Define a click listener
imgContainerView.setOnClickListener( {
    val intent = Intent(this, Activity2::class.java)
    // Create the transition animation - the images in the layouts
    // of both activities are defined with android:transitionName="robot"
    val options = ActivityOptions
            .makeSceneTransitionAnimation(this, androidRobotView, "robot")
    // Start the new activity
    startActivity(intent, options.toBundle())
})

Java

// Get the element that receives the click event
final View imgContainerView = findViewById(R.id.img_container);

// Get the common element for the transition in this activity
final View androidRobotView = findViewById(R.id.image_small);

// Define a click listener
imgContainerView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this, Activity2.class);
        // Create the transition animation - the images in the layouts
        // of both activities are defined with android:transitionName="robot"
        ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(this, androidRobotView, "robot");
        // Start the new activity
        startActivity(intent, options.toBundle());
    }
});

अपने कोड में जनरेट किए गए शेयर किए गए डाइनैमिक व्यू के लिए, View.setTransitionName() फ़ंक्शन, दोनों में एक जैसा एलिमेंट का नाम बताने के लिए इस्तेमाल होता है गतिविधियां.

जब आप दूसरी गतिविधि पूरी कर लें तो सीन ट्रांज़िशन ऐनिमेशन को उलटा करने के लिए, Activity.finishAfterTransition() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है Activity.finish() की जगह फ़ंक्शन का इस्तेमाल करें.

एक से ज़्यादा शेयर किए गए एलिमेंट वाली गतिविधि शुरू करें

दो गतिविधियों वाली दो गतिविधियों के बीच एक सीन ट्रांज़िशन ऐनिमेशन बनाने के लिए एक साझा एलीमेंट से ज्यादा, दोनों लेआउट में साझा तत्वों को android:transitionName एट्रिब्यूट का इस्तेमाल करें या दोनों गतिविधियों में View.setTransitionName() फ़ंक्शन—और एक बनाएं ActivityOptions ऑब्जेक्ट को निम्न रूप में दिखाता है:

Kotlin

// Rename the Pair class from the Android framework to avoid a name clash
import android.util.Pair as UtilPair
...
val options = ActivityOptions.makeSceneTransitionAnimation(this,
        UtilPair.create(view1, "agreedName1"),
        UtilPair.create(view2, "agreedName2"))

Java

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
        Pair.create(view1, "agreedName1"),
        Pair.create(view2, "agreedName2"));