एंड्रॉइड में किसी अन्य गतिविधि को कॉल करते समय एनीमेशन कैसे प्रदान करें?


115

मेरे पास दो एक्टिविटी ए और बी हैं। मैं चाहता हूं कि जब ए गतिविधि बी को कॉल करे और एनीमेशन को सिकोड़ें तो ए बी गतिविधि को अधिकतम करें। ए को इसके लिए एनीमेशन एक्सएमएल फाइलों की जरूरत नहीं है।

जब हम एंड्रॉइड में एक और गतिविधि कहते हैं तो यह अपना डिफ़ॉल्ट एनीमेशन देता है और फिर यह सिकुड़ एनीमेशन कहता है।

मैं जो चाहता हूं वह यह है कि डिफ़ॉल्ट एनीमेशन नहीं होना चाहिए और मुझे जो एनीमेशन चाहिए वह होना चाहिए।

क्या हम वास्तव में किसी अन्य गतिविधि को कॉल करते समय एनीमेशन दे सकते हैं?

जवाबों:


144

एपीआई 16 के बाद से आप एक गतिविधि विकल्प बंडल की आपूर्ति कर सकते हैं जब Context.startActivity (इरादे, बंडल) या संबंधित तरीकों को बुलाते हैं । यह ActivOptions बिल्डर के माध्यम से बनाया गया है :

Intent myIntent = new Intent(context, MyActivity.class);
ActivityOptions options = 
   ActivityOptions.makeCustomAnimation(context, R.anim.fade_in, R.anim.fade_out);
context.startActivity(myIntent, options.toBundle());

बिल्डर और ActivityOptions के अन्य तरीकों की जाँच के लिए मत भूलना ActivityOptionsCompat अगर आप समर्थन लाइब्रेरी का उपयोग कर रहे हैं।



एपीआई 5+:

API स्तर 5+ को लक्षित करने वाले ऐप्स के लिए क्रियाएँ overridePendingTransitionविधि है। यह आने वाले और बाहर जाने वाले एनिमेशन के लिए दो संसाधन आईडी लेता है। 0एनिमेशन की एक आईडी निष्क्रिय कर देगी। इस कॉल के तुरंत बाद startActivityकॉल करें।

अर्थात:

startActivity(new Intent(this, MyActivity.class));
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

एपीआई 3+:

आप Intent.FLAG_ACTIVITY_NO_ANIMATIONअपने इरादे में ध्वज के साथ डिफ़ॉल्ट एनीमेशन (दाईं ओर से स्लाइड) को रोक सकते हैं ।

अर्थात:

Intent myIntent = new Intent(context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(myIntent);

फिर आपकी गतिविधि में आपको बस अपना स्वयं का एनीमेशन निर्दिष्ट करना होगा।

यह 1.5 एपीआई (स्तर 3) के लिए भी काम करता है।


4
जब आप कहते हैं कि "आपका अपना एनीमेशन निर्दिष्ट करें" तो आपका क्या मतलब है? आप यह कैसे करते हैं? धन्यवाद!
pqn

मेरे पास भी वही प्रश्न है। संभवतया onResume और onPause में एनीमेशन शुरू करें।
Tima

इसके बजाय एनिमेटर का उपयोग करने का एक तरीका है?
एंड्रॉयड डेवलपर

आप कॉल खत्म होने के बाद भी इसका इस्तेमाल कर सकते हैं ()!
थियागोलर

क्या R.anim.fade_inअभी भी एक xml फ़ाइल एनीमेशन नहीं है जिसके बारे में हमें अनुमान है res\anim ?
एलेक्स जोलीग

78

आपको इसे प्राप्त करने के लिए OverridePendingTransition पद्धति का उपयोग करना होगा, जो गतिविधि वर्ग में है । एपिडेमोस उदाहरण के रेस / एनीमेशन फ़ोल्डर में नमूना एनिमेशन। इसे जाँचे। ApiDemos / App / गतिविधि / एनीमेशन में डेमो की जाँच करें

उदाहरण:

@Override
public void onResume(){
    // TODO LC: preliminary support for views transitions
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}

1
उत्तर के लिए धन्यवाद। OverridePendingTransition विधि API स्तर 5 से समर्थित है और मैं चाहता हूं कि एप्लिकेशन Android 1.5 से समर्थित हो। क्या एक गतिविधि से दूसरी गतिविधि तक एनीमेशन प्रदान करने का कोई अन्य तरीका है।
सुनील

5
बहुत बढ़िया! इसके साथ खेलने में बहुत मज़ा आता है
कोई

@ सुनील के पास आपके समान ही क्वेटियन है। आप समस्या का समाधान करते हैं? एपीआई स्तर 3 या 4 (5 नहीं) के साथ एनीमेशन
डॉजकी ऑक्ट

जब उपयोगकर्ता ऐप के बाहर जाता है और वापस आता है, तो एनीमेशन कोड को onResume () पर रखने से एनिमेशन चल सकेगा। कई ऐप में आदर्श नहीं।
विहान वर्मा

मुझे जोड़ने की ज़रूरत super.onResume();थी, हो रही थी: "android.util.SuperNotCalledException: Activity {com.abc.MyActivity} ने super.onResume ()) के माध्यम से कॉल नहीं किया
Gene Bo


3

जेली बीन इसके लिए SupportOptions.makeCustomAnimation () विधि के साथ समर्थन जोड़ता है । बेशक, चूंकि यह केवल जेली बीन पर है, यह व्यावहारिक उद्देश्यों के लिए बहुत अधिक बेकार है।


5
यह अब बेकार नहीं है :)
ग्रेग एननिस 20

ActivityOptionsCompatयदि आप प्री-जेलीबीन को लक्षित करते हैं तो इसका उपयोग करें ।
Thuy Trinh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.