यह देखने पर निर्भर करता है कि आपके दृश्य का रंग कैसा है और आपको अपना लक्ष्य रंग कैसे मिलता है, इसके लिए कई अलग-अलग तरीके हैं।
पहले दो Android संपत्ति एनीमेशन ढांचे का उपयोग करता है ।
एक ऑब्जेक्ट एनिमेटर का उपयोग करें यदि:
- आपके विचार
argb
का एक xml फ़ाइल में मान के रूप में इसकी पृष्ठभूमि का रंग है ।
- आपके विचार में पहले इसका रंग निर्धारित किया गया था
view.setBackgroundColor()
- आपके विचार में इसका बैकग्राउंड रंग एक ड्रिबल में परिभाषित किया गया है जो स्ट्रोक या कॉर्नर रेडियस जैसी किसी भी अतिरिक्त गुण को परिभाषित नहीं करता है।
- आपके विचार में इसकी पृष्ठभूमि का रंग एक ड्रॉबल में परिभाषित किया गया है और आप स्ट्रोक या कॉर्नर त्रिज्या जैसे किसी भी अतिरिक्त गुण को हटाना चाहते हैं, ध्यान रखें कि अतिरिक्त गुणों को हटाने से एनिमेटेड नहीं होगा।
ऑब्जेक्ट एनिमेटर कॉल करके काम करता है view.setBackgroundColor
जो परिभाषित ड्रॉबल को बदल देता है जब तक कि यह एक उदाहरण नहीं है ColorDrawable
, जो कि यह शायद ही कभी होता है। इसका मतलब यह है कि स्ट्रोक या कोनों जैसे एक ड्रॉबल से किसी भी अतिरिक्त पृष्ठभूमि गुणों को हटा दिया जाएगा।
मान एनिमेटर का उपयोग करें यदि:
- आपके विचार में इसका बैकग्राउंड कलर एक ड्रिबल में परिभाषित किया गया है जो स्ट्रोक या कॉर्नर रेडियस की तरह गुणों को भी सेट करता है और आप इसे एक नए रंग में बदलना चाहते हैं जो रन करते समय तय किया जाता है।
यदि ड्रा करने योग्य परिवर्तन का उपयोग करें :
- आपका दृष्टिकोण दो ड्रॉएबल के बीच स्विच करना चाहिए जो कि परिनियोजन से पहले परिभाषित किया गया है।
मेरे पास ट्रांज़िशन ड्रॉबल्स के साथ कुछ प्रदर्शन के मुद्दे हैं जो एक ड्रॉयरलैट को खोलते समय चलता है जिसे मैं हल करने में सक्षम नहीं हूं, इसलिए यदि आप किसी भी अप्रत्याशित हकलाना का सामना करते हैं तो आप उसी बग में भाग सकते हैं जैसे मेरे पास है।
आप आप एक उपयोग करना चाहते हैं मूल्य एनिमेटर उदाहरण को संशोधित करना होगा drawable StateLists या एक LayerLists drawable अन्यथा उस पर दुर्घटना होगा, final GradientDrawable background = (GradientDrawable) view.getBackground();
लाइन।
ऑब्जेक्ट एनिमेटर :
देखें परिभाषा:
<View
android:background="#FFFF0000"
android:layout_width="50dp"
android:layout_height="50dp"/>
ObjectAnimator
इस तरह बनाएं और उपयोग करें।
final ObjectAnimator backgroundColorAnimator = ObjectAnimator.ofObject(view,
"backgroundColor",
new ArgbEvaluator(),
0xFFFFFFFF,
0xff78c5f9);
backgroundColorAnimator.setDuration(300);
backgroundColorAnimator.start();
आप एनीमेशन को एक xml से एनीमेशन परिभाषा में भी लोड कर सकते हैं जैसे कि ऐनिमेटर इनफ्लैटर का उपयोग करता है जैसे कि एंड्रॉइड ऑब्जेक्ट में एक्समाइट करता है। एनीमेटर एनिमेटिंग बैकग्राउंड ऑफ लेआउट
मूल्य एनीमेटर :
देखें परिभाषा:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
ड्रा करने योग्य परिभाषा:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<stroke
android:color="#edf0f6"
android:width="1dp"/>
<corners android:radius="3dp"/>
</shape>
इस तरह एक वैल्यूएनीमेटर बनाएँ और उसका उपयोग करें:
final ValueAnimator valueAnimator = ValueAnimator.ofObject(new ArgbEvaluator(),
0xFFFFFFFF,
0xff78c5f9);
final GradientDrawable background = (GradientDrawable) view.getBackground();
currentAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(final ValueAnimator animator) {
background.setColor((Integer) animator.getAnimatedValue());
}
});
currentAnimation.setDuration(300);
currentAnimation.start();
परिवर्तन करने योग्य :
देखें परिभाषा:
<View
android:background="@drawable/example"
android:layout_width="50dp"
android:layout_height="50dp"/>
ड्रा करने योग्य परिभाषा:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#FFFFFF"/>
<stroke
android:color="#edf0f6"
android:width="1dp"/>
<corners android:radius="3dp"/>
</shape>
</item>
<item>
<shape>
<solid android:color="#78c5f9"/>
<stroke
android:color="#68aff4"
android:width="1dp"/>
<corners android:radius="3dp"/>
</shape>
</item>
</transition>
ट्रांज़िशनड्राइव का उपयोग इस तरह करें:
final TransitionDrawable background = (TransitionDrawable) view.getBackground();
background.startTransition(300);
आप .reverse()
एनिमेशन उदाहरण पर कॉल करके एनिमेशन को उल्टा कर सकते हैं ।
एनिमेशन करने के कुछ और तरीके भी हैं लेकिन ये तीन शायद सबसे आम हैं। मैं आम तौर पर एक ValueAnimator का उपयोग करता हूं।