ड्रॉ करने लायक ग्राफ़िक्स ऐनिमेट करें

लिखने का तरीका आज़माएं
Android के लिए, Jetpack Compose हमारा सुझाया गया यूज़र इंटरफ़ेस (यूआई) टूलकिट है. Compose में ऐनिमेशन इस्तेमाल करने का तरीका जानें.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
पहली इमेज. ड्रॉ करने लायक ऐनिमेशन वाला ऐनिमेशन.

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

पहला विकल्प, AnimationDrawable का इस्तेमाल करना है. यह से आपको कई स्टैटिक ड्रॉ करने लायक फ़ाइलें, जो एक बार में एक डिसप्ले एक ऐनिमेशन बनाएं. दूसरा विकल्प यह है कि AnimatedVectorDrawable, इसकी मदद से प्रॉपर्टी को ऐनिमेट किया जा सकता है ड्रॉ करने लायक वेक्टर का.

ऐनिमेशनड्रॉबल का इस्तेमाल करें

ऐनिमेशन बनाने का एक तरीका यह है कि ड्रॉ करने लायक रिसॉर्स का क्रम लोड किया जाए, जैसे कि रोल का कोई रोल. AnimationDrawable क्लास इस तरह के ड्रॉ करने लायक ऐनिमेशन का आधार है.

AnimationDrawable का इस्तेमाल करके, अपने कोड में ऐनिमेशन के फ़्रेम तय किए जा सकते हैं क्लास API का इस्तेमाल कर सकते हैं, लेकिन एक ही एक्सएमएल फ़ाइल से उन्हें आसानी से परिभाषित किया जा सकता है, जिसमें उस ऐनिमेशन का हिस्सा होते हैं. इस तरह के ऐनिमेशन के लिए एक्सएमएल फ़ाइल res/drawable/ में रखी जाती है डायरेक्ट्री में जोड़ा जा सकता है. इस मामले में, निर्देश में दिखाई गई है.

एक्सएमएल फ़ाइल में रूट नोड के तौर पर <animation-list> एलिमेंट और चाइल्ड <item> नोड की सीरीज़ जिसमें से हर एक फ़्रेम को परिभाषित करता है—एक ड्रॉ करने लायक संसाधन और उसकी अवधि. यहां Drawable ऐनिमेशन के लिए एक्सएमएल फ़ाइल का एक उदाहरण दिया गया है:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

यह एनिमेशन तीन फ़्रेम के लिए चलता है. android:oneshot को सेट किया जा रहा है लिस्ट की एट्रिब्यूट की मदद से true को एक बार साइकल चलाना और फिर 'रोकें' बटन को दबाकर रखना नज़र आ रहे हैं. अगर android:oneshot को false पर सेट किया जाता है, तो ऐनिमेशन लूप में चला जाता है.

अगर इस एक्सएमएल को res/drawable/ में rocket_thrust.xml के तौर पर सेव किया जाता है डायरेक्ट्री में जोड़ा है, तो आप इसे View में बैकग्राउंड इमेज के रूप में जोड़ सकते हैं और फिर इसे चलाने के लिए start() को कॉल करें. यहां एक ऐसी गतिविधि का उदाहरण दिया गया है जिसमें ऐनिमेशन को ImageView और इसके बाद ऐनिमेशन का इस्तेमाल किया स्क्रीन टच होने पर:

Kotlin

private lateinit var rocketAnimation: AnimationDrawable

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val rocketImage = findViewById<ImageView>(R.id.rocket_image).apply {
        setBackgroundResource(R.drawable.rocket_thrust)
        rocketAnimation = background as AnimationDrawable
    }

    rocketImage.setOnClickListener({ rocketAnimation.start() })
}

Java

AnimationDrawable rocketAnimation;

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
  rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
  rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

  rocketImage.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        rocketAnimation.start();
      }
  });
}

यह ध्यान रखना ज़रूरी है कि start() तरीके का इस्तेमाल करके आपकी onCreate() वाली सेटिंग के दौरान, AnimationDrawable को कॉल नहीं किया जा सकता Activity क्योंकि AnimationDrawable अभी तक पूरी तरह से विंडो. इंटरैक्शन की आवश्यकता के बिना, ऐनिमेशन को तुरंत चलाने के लिए, उसे onStart() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है तरीका होता है. इसे तब कॉल किया जाता है, जब Android स्क्रीन पर व्यू दिखाता है.Activity

एक्सएमएल सिंटैक्स, उपलब्ध टैग, और एट्रिब्यूट के बारे में ज़्यादा जानकारी के लिए, ऐनिमेशन संसाधन देखें.

एनिमेट होने वाले वेक्टरड्रॉएबल का इस्तेमाल करें

ड्रॉ करने लायक वेक्टर ड्रॉ करने लायक एक तरह का ऐप्लिकेशन है. इसे बिना पिक्सलेट या धुंधला किए बढ़ाया जा सकता है. कॉन्टेंट बनाने AnimatedVectorDrawable क्लास—और AnimatedVectorDrawableCompat की मदद से, पुराने सिस्टम के साथ काम करने की सुविधा मिलती है. इस सुविधा की मदद से, यह ऐनिमेशन किया जा सकता है ड्रॉए जा सकने वाले वेक्टर के गुण, जैसे कि उसे घुमाना या पाथ डेटा को मॉर्फ़ करना या उसे मॉर्फ़ करना अपलोड करें.

आम तौर पर, तीन एक्सएमएल फ़ाइलों में ऐनिमेशन वाले वेक्टर ड्रॉ करने की सुविधा तय की जाती है:

  • ऐसा वेक्टर जिसमें <vector> एलिमेंट शामिल है res/drawable/.
  • एक ऐनिमेशन वाला वेक्टर, जिसमें <animated-vector> एलिमेंट शामिल है res/drawable/.
  • <objectAnimator> एलिमेंट वाले एक या उससे ज़्यादा ऑब्जेक्ट ऐनिमेशन res/animator/.

ऐनिमेशन वाले वेक्टर ड्रॉ करने की सुविधा, <group> और <path> एलिमेंट. <group> एलिमेंट पाथ या सबग्रुप शामिल हैं और <path> एलिमेंट, ड्रॉ किए जाने वाले पाथ के बारे में जानकारी देता है.

ऐनिमेशन के लिए, ड्रॉ करने लायक कोई वेक्टर तय करने पर, android:name का इस्तेमाल करें एट्रिब्यूट की मदद से ग्रुप और पाथ को यूनीक नाम दें, ताकि आप उन्हें अपने ऐनिमेटर से देख सकें परिभाषाएं. उदाहरण के लिए:

res/drawable/vectordrawable.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="64dp"
    android:width="64dp"
    android:viewportHeight="600"
    android:viewportWidth="600">
    <group
        android:name="rotationGroup"
        android:pivotX="300.0"
        android:pivotY="300.0"
        android:rotation="45.0" >
        <path
            android:name="v"
            android:fillColor="#000000"
            android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
    </group>
</vector>

ड्रॉ करने लायक ऐनिमेटेड वेक्टर की परिभाषा उनके नाम से:

res/drawable/animatorvectordrawable.xml

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
  android:drawable="@drawable/vectordrawable" >
    <target
        android:name="rotationGroup"
        android:animation="@animator/rotation" />
    <target
        android:name="v"
        android:animation="@animator/path_morph" />
</animated-vector>

ऐनिमेशन की परिभाषाओं से पता चलता है कि ObjectAnimator या AnimatorSet ऑब्जेक्ट. कॉन्टेंट बनाने इस उदाहरण में मौजूद पहला ऐनिमेटर, टारगेट ग्रुप को 360 डिग्री घुमाता है:

res/animator/rotation.xml

<objectAnimator
    android:duration="6000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360" />

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

res/animator/path_morph.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
        android:duration="3000"
        android:propertyName="pathData"
        android:valueFrom="M300,70 l 0,-70 70,70 0,0   -70,70z"
        android:valueTo="M300,70 l 0,-70 70,0  0,140 -70,0 z"
        android:valueType="pathType" />
</set>

इससे मिला AnimatedVectorDrawable:

दूसरी इमेज. AnimatedVectorDrawable.

ऐनिमेशन वाले वेक्टर ड्रॉएबल (एवीडी) की झलक

Android Studio में ऐनिमेटेड वेक्टर ड्रॉ करने लायक टूल से आपको ऐनिमेशन की झलक देखने की सुविधा मिलती है ड्रॉ करने लायक संसाधन शामिल हैं. इस टूल की मदद से, <animation-list>, इसमें <animated-vector>, और <animated-selector> संसाधन Android Studio की मदद से, अपनी पसंद के मुताबिक बनाए गए ऐनिमेशन को आसानी से बेहतर बनाया जा सकता है.

Android Studio में उपयोगकर्ता ऐनिमेशन की झलक देख रहा है और उसे चला रहा है अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
तीसरी इमेज. Android Studio में ऐनिमेटेड वेक्टर ड्रॉ करने लायक टूल.

ज़्यादा जानकारी के लिए, एपीआई का रेफ़रंस देखें AnimatedVectorDrawable.