व्यू पर ट्वीड ऐनिमेशन करने के लिए, व्यू ऐनिमेशन सिस्टम का इस्तेमाल किया जा सकता है. ट्वीन ऐनिमेशन, शुरुआत का पॉइंट, एंड पॉइंट, साइज़, रोटेशन, और ऐनिमेशन के अन्य सामान्य पहलुओं जैसी जानकारी का इस्तेमाल करके ऐनिमेशन का हिसाब लगाता है.
ट्वीन ऐनिमेशन, किसी व्यू ऑब्जेक्ट के कॉन्टेंट पर कई आसान बदलाव (पोज़िशन, साइज़, रोटेशन,
और पारदर्शिता) कर सकता है. इसलिए, अगर आपके पास TextView
ऑब्जेक्ट है, तो टेक्स्ट को दूसरी जगह ले जाया जा सकता है, घुमाया जा सकता है, बड़ा किया जा सकता है या छोटा किया जा सकता है. अगर इसमें बैकग्राउंड इमेज है, तो टेक्स्ट के साथ-साथ बैकग्राउंड इमेज भी बदल जाएगी. animation package
, ट्वीन ऐनिमेशन में इस्तेमाल की जाने वाली सभी क्लास उपलब्ध कराता है.
ऐनिमेशन से जुड़े निर्देशों का क्रम, ट्वीन ऐनिमेशन के बारे में बताता है. इसे एक्सएमएल या Android कोड से तय किया जाता है. लेआउट तय करने के साथ ही, एक्सएमएल फ़ाइल का सुझाव दिया जाता है. ऐसा इसलिए, क्योंकि यह ऐनिमेशन को हार्ड-कोड करने के बजाय, आसानी से पढ़ा जा सकने वाला, फिर से इस्तेमाल करने लायक, और बदला जा सकता है. नीचे दिए गए उदाहरण में, हम एक्सएमएल का इस्तेमाल करते हैं. (एक्सएमएल के बजाय, अपने ऐप्लिकेशन कोड में ऐनिमेशन तय करने के बारे में ज़्यादा जानने के लिए, AnimationSet
क्लास और अन्य Animation
सबक्लास देखें.)
ऐनिमेशन के निर्देशों से यह तय होता है कि आपको कौनसे बदलाव करने हैं, वे कब होने चाहिए, और उन्हें लागू होने में कितना समय लगना चाहिए. ट्रांसफ़ॉर्मेशन, क्रम से या एक साथ किए जा सकते हैं - उदाहरण के लिए, किसी TextView के कॉन्टेंट को बाईं से दाईं ओर ले जाया जा सकता है और फिर 180 डिग्री घुमाया जा सकता है. इसके अलावा, टेक्स्ट को एक साथ घुमाया और मूव किया जा सकता है. हर ट्रांसफ़ॉर्मेशन के लिए, उस ट्रांसफ़ॉर्मेशन के हिसाब से पैरामीटर का एक सेट (साइज़ में बदलाव के लिए शुरू और आखिर में साइज़, घुमाने के लिए शुरू और आखिर में ऐंगल वगैरह) और सामान्य पैरामीटर का एक सेट (उदाहरण के लिए, शुरू होने का समय और अवधि) लेता है. कई ट्रांसफ़ॉर्मेशन ऐक्शन एक साथ होने के लिए, उन्हें शुरू होने का एक ही समय दें. उन्हें क्रम से लगाने के लिए, ट्रांसफ़ॉर्मेशन के शुरू होने का समय और पिछले ट्रांसफ़ॉर्मेशन के कुल समय का हिसाब लगाएं.
ऐनिमेशन एक्सएमएल फ़ाइल, आपके Android प्रोजेक्ट की res/anim/
डायरेक्ट्री में होती है. फ़ाइल में एक रूट एलिमेंट होना चाहिए: यह एक <alpha>
, <scale>
, <translate>
, <rotate>
, इंटरपोलटर एलिमेंट या <set>
एलिमेंट होगा, जिसमें इन एलिमेंट के ग्रुप शामिल होंगे. इनमें एक और <set>
शामिल हो सकता है. डिफ़ॉल्ट रूप से, सभी ऐनिमेशन निर्देश एक साथ लागू होते हैं. इन्हें क्रम से चलाने के लिए, आपको startOffset
एट्रिब्यूट की वैल्यू देनी होगी. इसका उदाहरण नीचे दिया गया है.
ApiDemos में मौजूद इस एक्सएमएल का इस्तेमाल, किसी व्यू ऑब्जेक्ट को स्ट्रेच करने के लिए किया जाता है. इसके बाद, एक साथ उस व्यू ऑब्जेक्ट को घुमाया और घुमाया जाता है.
<set android:shareInterpolator="false"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /> <set android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" android:fillBefore="false" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" /> </set> </set>
स्क्रीन कोऑर्डिनेट (इस उदाहरण में इस्तेमाल नहीं किए गए हैं) सबसे ऊपर बाएं कोने में (0,0) होते हैं. ये, नीचे और दाईं ओर जाने पर बढ़ते हैं.
pivotX जैसी कुछ वैल्यू को ऑब्जेक्ट के हिसाब से या पैरंट के हिसाब से बताया जा सकता है. पक्का करें कि आपकी पसंद का फ़ॉर्मैट सही हो. जैसे, पैरंट के मुकाबले 50% के लिए 50 या उसी के लिए 50% मामलों में "50%" का इस्तेमाल करना.
Interpolator
असाइन करके, यह तय किया जा सकता है कि समय के साथ कोई ट्रांसफ़ॉर्मेशन कैसे लागू होता है. Android में कई Interpolator सबक्लास शामिल हैं, जो
अलग-अलग स्पीड कर्व तय करते हैं: उदाहरण के लिए, AccelerateInterpolator
किसी ट्रांसफ़ॉर्मेशन को धीरे से शुरू करके तेज़ी से आगे बढ़ने के लिए कहता है. हर एक में एक एट्रिब्यूट वैल्यू होती है, जिसे एक्सएमएल में लागू किया जा सकता है.
इस एक्सएमएल को प्रोजेक्ट की res/anim/
डायरेक्ट्री में hyperspace_jump.xml
के तौर पर सेव करने के बाद, नीचे दिया गया कोड इसका रेफ़रंस देगा और इसे लेआउट में मौजूद ImageView
ऑब्जेक्ट पर लागू करेगा.
Kotlin
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation -> findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation) }
Java
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); spaceshipImage.startAnimation(hyperspaceJumpAnimation);
startAnimation()
के विकल्प के तौर पर,
की मदद से ऐनिमेशन के शुरू होने का समय तय किया जा सकता है. इसके बाद, Animation.setStartTime()
वाले व्यू को ऐनिमेशन असाइन किया जा सकता है.View.setAnimation()
एक्सएमएल सिंटैक्स, उपलब्ध टैग, और एट्रिब्यूट के बारे में ज़्यादा जानने के लिए, ऐनिमेशन संसाधन देखें.
ध्यान दें: आपका ऐनिमेशन किसी भी तरह से मूव या उसका साइज़ बदलने पर भी, आपके ऐनिमेशन को होस्ट करने वाले व्यू के बाउंड अपने-आप अडजस्ट नहीं होंगे. इसके बावजूद, ऐनिमेशन को उसके व्यू की सीमाओं से बाहर भी ड्रॉ किया जाएगा और उसे क्लिप नहीं किया जाएगा. हालांकि, अगर ऐनिमेशन पैरंट व्यू की सीमाओं से ज़्यादा हो जाता है, तो क्लिपिंग होगी.