नई गतिविधि शुरू करते समय गतिविधि स्लाइड-इन एनीमेशन अक्षम करें?


140

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

क्या इस एनीमेशन को निष्क्रिय करने का कोई तरीका है? मैं बस चाहता हूं कि नई गतिविधि बिना किसी प्रकार के एनीमेशन के दिखाई दे।

जवाबों:


190

FLAG_ACTIVITY_NO_ANIMATIONझंडा एनीमेशन अक्षम करने जब गतिविधियों शुरू करने के लिए ठीक काम करता है।

finish()किसी गतिविधि पर कॉल करते समय ट्रिगर किए गए समान एनीमेशन को अक्षम करने के लिए , अर्थात एनीमेशन दाईं से बाईं ओर स्लाइड करता है, आप कॉल करने के overridePendingTransition(0, 0)बाद कॉल कर सकते हैंfinish() और अगले एनीमेशन को बाहर रखा जाएगा।

यदि आप कॉल करने के overridePendingTransition(0, 0)बाद कॉल करते हैं तो यह इन-एनीमेशन पर भी काम करता है startActivity(...)


9
ध्यान दें कि FLAG_ACTIVITY_NO_ANIMATIONऔर overridePendingTransitionदोनों एपीआई स्तर 5+ ही हैं।
अजदेव

बैक की प्रेस पर किसी गतिविधि से वापस जाने पर यह मदद नहीं करता है।
यार

4
आप सबसे अच्छे हो। overridePendingTransition (0, 0) -> देवतुल्य है। यह केवल खत्म () एनीमेशन को ओवरराइड करता है, लेकिन पिछली गतिविधि को फिर से शुरू करते समय ट्रिगर किए गए एनीमेशन को नहीं।
फिलिप जाहोदा

1
मैं इस उत्तर को नापसंद करता हूं क्योंकि यह 'बैक' सॉफ्टीक्स को दबाने के कारण होने वाले संक्रमण को कवर नहीं करता है। ओपी पूछते हैं कि एनीमेशन को कैसे asks डिसेबल ’किया जाए, न कि
tell सिलेक्टिवली

3
यदि आप "बैक" एनीमेशन को अक्षम या ओवरराइड करना चाहते हैं, तो अपनी गतिविधि में समाप्त () विधि को ओवरराइड करें और उस कॉल को सुपर.फिनिश () में कॉल करें। समस्या सुलझ गयी।
ग्रिस्का

171

IMHO इस उत्तर को यहाँ सबसे सुरुचिपूर्ण तरीके से हल करते हैं ।।

डेवलपर को एक शैली बनानी चाहिए ,

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>

फिर गतिविधि या संपूर्ण अनुप्रयोग के लिए इसे विषय के रूप में सेट करें

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

देखा! अच्छा और आसान..

मूल लेखक को ps क्रेडिट कृपया ।।


1
यह बैक के लिए काम नहीं करता है, और यह टाइटल बार के रूप को बदल देता है (यह इसे छोटा बनाता है) ...
मर्क

क्या आपको यकीन है कि यू ने शैली में कुछ अन्य गुणों को नहीं जोड़ा है, किसी और के कारण इस "प्रभाव" का उल्लेख नहीं किया गया है ..
इवोक

बस संदर्भ के लिए, यह एक दृश्य पदानुक्रम में समस्या पैदा कर सकता है जहाँ आपको अनुरोध करने की आवश्यकता होती है।
मार्टिन मार्कोसिनी

अच्छा होगा यदि आप थोड़ा विस्तृत करें, तो हम सकारात्मक समस्याओं से बचते हैं
इवोकस

4
@ मेरा मानना ​​है कि आपकी समस्या माता-पिता = "एंड्रॉइड: थीम" को सही ढंग से नहीं बदल रही है। आपको इसका उपयोग उस विषय के साथ करना चाहिए जिसे आप उपयोग करना चाहते हैं, मूल रूप से यह कोड किसी विषय में विशिष्ट एनीमेशन को निष्क्रिय करता है। उदाहरण के लिए "android: Theme" के बजाय "Theme.AppCompat.Light.NoActionBar" का उपयोग करें, और आपको इसका मतलब मिलेगा। मुझे उम्मीद है यह मदद करेगा।
रिकोमर

33

लागू

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

फिर

overridePendingTransition(0, 0);

इससे एनीमेशन बंद हो जाएगा।


28

मेरी राय में सबसे अच्छा जवाब का उपयोग करना है "overridePendingTransition(0, 0);"

एनीमेशन देखने से बचने के लिए जब आप चाहते हैं Intentएक करने के लिए Activityउपयोग करें:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

और एनीमेशन नहीं देखने के लिए जब आप वापस बटन अवहेलना प्रेस onPauseमें विधि अपनेnewactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}


13

यह मेरे लिए तब काम करता है जब एक्टिविटी ऐनिमेशन को अक्षम करता है।

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

9

मैं 4.4.2 पर हूं, और लॉन्चिंग गतिविधि के ऑनक्रिएट में ओवरराइडिंग ट्रेंड्सट्रांस (0, 0) को कॉल कर रहा हूं (प्रारंभिक एनीमेशन को अक्षम कर देगा) ( काम नहीं करने के तुरंत बाद) जैसा कि एक अन्य जवाब में कहा गया है, समाप्त होने के बाद ओवरराइडिंग ट्रेंडिंगट्रांसिशन (0, 0) को कॉल करना बंद एनीमेशन को निष्क्रिय करता है।

Btw, मैंने पाया कि "एंड्रॉइड: windowAnimationStyle"> @ null (यहां उल्लेखित एक और उत्तर) के साथ शैली सेट करना उस समय क्रैश हो गया जब मेरी लॉन्चिंग गतिविधि ने एक्शन बार शीर्षक सेट करने का प्रयास किया। आगे डीबग करते हुए, मैंने पाया कि किसी भी तरह से यह विंडो का कारण बनता है। विंडो (विंडो। एफएटीआरयूआरआईएआरएबीएआर) गतिविधि के initActionBar () में विफल हो जाता है।


1
onresume के बारे में क्या? एकल शीर्ष गतिविधियाँ और वह सब।
लस्सी किन्नुनेन

7

FLAG_ACTIVITY_NO_ANIMATION काम कर सकता है, लेकिन FLAG_ACTIVITY_CLEAR_TASK और FLAG_ACTIVITY_NEW_TASK के साथ संयुक्त होने पर मेरे लिए चाल नहीं चल रही थी। मैं स्पष्ट रूप से एक नई गतिविधि स्टैक के साथ एक नया कार्य बनाने के लिए एनीमेशन देख रहा हूं क्योंकि मैं अपने अन्य शीर्ष-स्तरीय विचारों में बाद में नेविगेट करता हूं।

यहाँ क्या काम किया गया था "ओवरराइडिंग ट्रेंडिंग (0, 0);" या तो मेरी शुरुआत के बाद तुरंत () कॉल या onPause ()। दोनों तरीकों ने काम किया, लेकिन शुरुआत के बाद ऐसा करना () मुझे एनिमेशन और जब मैं नहीं चाहता, तब थोड़ा अधिक नियंत्रण देता है।


2

मेरे पास एक काली स्क्रीन होने की एक समान समस्या थी जो एक गतिविधि से दूसरे उपयोग करने के लिए संक्रमण को फिसलने पर दिखाई देती है overridependingtransition। और मैंने नीचे दिए गए तरीके का अनुसरण किया और यह काम कर गया

1) एक noanim.xmlएनिमेटेड फ़ोल्डर में बनाया

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

और इस्तेमाल किया

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

मेरा मूल एनीमेशन के रूप में पहला पैरामीटर और दूसरा पैरामीटर जो मेरे डमी एनीमेशन के रूप में निकास एनीमेशन है


1

आदेश जब ढेर में पहले से ही एक गतिविधि शुरू करने काले रंग की पृष्ठभूमि से बचने के लिए, मैं जोड़ा overridePendingTransition(0,0)में onStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

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