कस्टम ट्रांज़िशन ऐनिमेशन बनाएं

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

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

इस पेज पर, प्रॉपर्टी की वैल्यू कैप्चर करने और ऐनिमेशन बनाने का तरीका बताया गया है कस्टम ट्रांज़िशन शामिल करें.

ट्रांज़िशन क्लास को बढ़ाएं

कस्टम ट्रांज़िशन बनाने के लिए, अपने प्रोजेक्ट में ऐसी क्लास जोड़ें जो Transition क्लास को बड़ा करती हो और इस स्निपेट में दिखाए गए फ़ंक्शन को बदल देती हो:

Kotlin

class CustomTransition : Transition() {

    override fun captureStartValues(transitionValues: TransitionValues) {}

    override fun captureEndValues(transitionValues: TransitionValues) {}

    override fun createAnimator(
        sceneRoot: ViewGroup,
        startValues: TransitionValues?,
        endValues: TransitionValues?
    ): Animator? {}

}

Java

public class CustomTransition extends Transition {

    @Override
    public void captureStartValues(TransitionValues values) {}

    @Override
    public void captureEndValues(TransitionValues values) {}

    @Override
    public Animator createAnimator(ViewGroup sceneRoot,
                                   TransitionValues startValues,
                                   TransitionValues endValues) {}
}

नीचे दिए सेक्शन में, इन फ़ंक्शन को बदलने का तरीका बताया गया है.

व्यू प्रॉपर्टी की वैल्यू कैप्चर करें

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

हालांकि, आम तौर पर किसी प्रॉपर्टी ऐनिमेशन में सभी व्यू प्रॉपर्टी के एक छोटे सबसेट की ज़रूरत होती है वैल्यू. उदाहरण के लिए, कलर ऐनिमेशन के लिए कलर प्रॉपर्टी की वैल्यू की ज़रूरत होती है, जबकि मूवमेंट को ऐनिमेशन को स्थिति प्रॉपर्टी के मानों की ज़रूरत है. चूंकि एक ऐनिमेशन के लिए ज़रूरी प्रॉपर्टी वैल्यू होती हैं ट्रांज़िशन के लिए खास होते हैं, इसलिए ट्रांज़िशन फ़्रेमवर्क हर प्रॉपर्टी वैल्यू ट्रांज़िशन के लिए. इसके बजाय, फ़्रेमवर्क उन कॉलबैक फ़ंक्शन को शुरू करता है जो ट्रांज़िशन की अनुमति देते हैं इसकी मदद से, सिर्फ़ अपनी ज़रूरत की प्रॉपर्टी वैल्यू कैप्चर की जा सकती हैं और उन्हें फ़्रेमवर्क में सेव किया जा सकता है.

शुरुआती वैल्यू को कैप्चर करें

शुरुआती व्यू वैल्यू को फ़्रेमवर्क में पास करने के लिए, captureStartValues(transitionValues) अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है फ़ंक्शन का इस्तेमाल करना होगा. फ़्रेमवर्क इस फ़ंक्शन को शुरुआती सीन में हर व्यू के लिए कॉल करता है. फ़ंक्शन आर्ग्युमेंट, एक TransitionValues ऑब्जेक्ट है, जिसमें रेफ़रंस है और Map इंस्टेंस में सेव करें, जिसमें आप व्यू वैल्यू सेव कर सकें चाहते हैं. लागू करने के दौरान, इन प्रॉपर्टी वैल्यू को फिर से पाएं और फ़्रेमवर्क को बेहतर तरीके से सेव करने में मदद करता है.

यह पक्का करने के लिए कि प्रॉपर्टी की वैल्यू की कुंजी का दूसरे से टकराव न हो TransitionValues कुंजियों के लिए, नीचे दी गई नाम रखने की स्कीम का इस्तेमाल करें:

package_name:transition_name:property_name

नीचे दिया गया स्निपेट, captureStartValues() फ़ंक्शन को लागू करने की प्रोसेस दिखाता है:

Kotlin

class CustomTransition : Transition() {

    // Define a key for storing a property value in
    // TransitionValues.values with the syntax
    // package_name:transition_class:property_name to avoid collisions
    private val PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background"

    override fun captureStartValues(transitionValues: TransitionValues) {
        // Call the convenience method captureValues
        captureValues(transitionValues)
    }

    // For the view in transitionValues.view, get the values you
    // want and put them in transitionValues.values
    private fun captureValues(transitionValues: TransitionValues) {
        // Get a reference to the view
        val view = transitionValues.view
        // Store its background property in the values map
        transitionValues.values[PROPNAME_BACKGROUND] = view.background
    }

    ...

}

Java

public class CustomTransition extends Transition {

    // Define a key for storing a property value in
    // TransitionValues.values with the syntax
    // package_name:transition_class:property_name to avoid collisions
    private static final String PROPNAME_BACKGROUND =
            "com.example.android.customtransition:CustomTransition:background";

    @Override
    public void captureStartValues(TransitionValues transitionValues) {
        // Call the convenience method captureValues
        captureValues(transitionValues);
    }


    // For the view in transitionValues.view, get the values you
    // want and put them in transitionValues.values
    private void captureValues(TransitionValues transitionValues) {
        // Get a reference to the view
        View view = transitionValues.view;
        // Store its background property in the values map
        transitionValues.values.put(PROPNAME_BACKGROUND, view.getBackground());
    }
    ...
}

आखिरी वैल्यू कैप्चर करें

फ़्रेमवर्क, captureEndValues(TransitionValues) फ़ंक्शन को कॉल करता है आखिरी सीन में हर टारगेट व्यू के लिए एक बार. अन्य सभी मामलों में, captureEndValues(), captureStartValues() की तरह ही काम करता है.

नीचे दिया गया कोड स्निपेट, captureEndValues() फ़ंक्शन को लागू करने की प्रोसेस दिखाता है:

Kotlin

override fun captureEndValues(transitionValues: TransitionValues) {
    captureValues(transitionValues)
}

Java

@Override
public void captureEndValues(TransitionValues transitionValues) {
    captureValues(transitionValues);
}

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

पसंद के मुताबिक ऐनिमेटर बनाएं

शुरुआती सीन और इसकी स्थिति के बीच व्यू में बदलावों को ऐनिमेट करने के लिए आखिरी सीन, createAnimator() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है फ़ंक्शन का इस्तेमाल करना होगा. जब फ़्रेमवर्क इस फ़ंक्शन को कॉल करता है, तो यह सीन रूट व्यू में पास हो जाता है और TransitionValues ऑब्जेक्ट जिनमें शुरू और आखिर की वैल्यू शामिल हैं कैप्चर किया गया.

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

उदाहरण के लिए, फ़ेड-आउट या फ़ेड-इन ऐनिमेशन को कस्टम ट्रांज़िशन के तौर पर लागू किया गया. यदि प्रारंभिक दृश्य में पाँच लक्ष्य हैं, तो जिनमें से दो को आखिरी सीन से हटा दिया जाता है और आखिरी सीन में किसी नए सीन के साथ-साथ नया टारगेट सेट करता है. इसके बाद फ़्रेमवर्क, createAnimator() को छह बार कॉल करता है. उनमें से तीन कॉल, दोनों सीन में मौजूद टारगेट के फ़ेड-आउट और फ़ेड-इन को ऐनिमेट करते हैं ऑब्जेक्ट हैं. दो और कॉल, आखिरी सीन से हटाए गए टारगेट के फ़ेड-आउट को ऐनिमेट करते हैं. एक कॉल के आखिरी सीन में, नए टारगेट का फ़ेड-इन ऐनिमेशन दिखाता है.

शुरुआती और आखिरी, दोनों सीन में मौजूद टारगेट व्यू के लिए फ़्रेमवर्क, startValues और, दोनों के लिए एक TransitionValues ऑब्जेक्ट endValues तर्क. उन टारगेट व्यू के लिए जो सिर्फ़ शुरुआत में मौजूद होते हैं या सीन खत्म होने के बाद, फ़्रेमवर्क TransitionValues ऑब्जेक्ट देता है संबंधित तर्क के लिए और दूसरे के लिए null.

नई वैल्यू जोड़ने पर, createAnimator(ViewGroup, TransitionValues, TransitionValues) फ़ंक्शन लागू करने के लिए कस्टम ट्रांज़िशन, तो Animator ऑब्जेक्ट बनाने के लिए कैप्चर की गई व्यू प्रॉपर्टी वैल्यू का इस्तेमाल करें और उसे फ़्रेमवर्क पर वापस करें. लागू करने के उदाहरण के लिए, में ChangeColor क्लास देखें कस्टम ट्रांज़िशन सैंपल. प्रॉपर्टी ऐनिमेशन बनाने वालों के बारे में ज़्यादा जानकारी के लिए, यहां देखें प्रॉपर्टी ऐनिमेशन.

कस्टम ट्रांज़िशन लागू करना

कस्टम ट्रांज़िशन, बिल्ट-इन ट्रांज़िशन की तरह ही काम करते हैं. अपनी पसंद के मुताबिक ट्रांज़िशन लागू किया जा सकता है ट्रांज़िशन मैनेजर का इस्तेमाल करके, जैसा कि ट्रांज़िशन लागू करना में बताया गया है.