एंड्रॉइड में एनीमेशन के बिना गतिविधि कैसे स्विच करें?


165

मैं FLAG_ACTIVITY_NO_ANIMATIONAndroidManifest फ़ाइल में Intent फ्लैग को ठीक से कैसे उपयोग कर सकता हूं ? मुझे लगता है कि मेरी समस्या तुच्छ है, लेकिन मुझे इसका अच्छा उदाहरण या समाधान नहीं मिल रहा है।

    <intent-filter>
        <data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
    </intent-filter>

हालाँकि कोई भी त्रुटि शिकायतकर्ता द्वारा नहीं बताई गई है, लेकिन dataयह सही नहीं है। मैं सिर्फ गतिविधियों के बीच स्विच करने के मामले में एनीमेशन को अक्षम करना चाहता हूं। मैं getWindow().setWindowAnimations(0);onCreate या onResume का उपयोग कर सकता हूं, लेकिन ध्वज का उपयोग करना बेहतर तरीका है, है ना?

मैं भी कोड में उपयोग कर सकते हैं:

    Intent intent = new Intent(v.getContext(), newactivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    getContext().startActivity(intent);

लेकिन मैं इस ध्वज का उपयोग एंड्रॉइड मेनीफेस्ट में करना चाहता हूं। दूसरी गतिविधि से पहली में लौटने के मामले में भी एनीमेशन को निष्क्रिय करने के लिए।


मुझे विषय का उपयोग करने के लिए पर्याप्त जानकारी मिली है - प्रवेश को परिभाषित करने, गतिविधियों या संपूर्ण अनुप्रयोग के लिए एनिमेशन से बाहर निकलें। क्या कोई मुझे इसके बारे में और अधिक जानकारी दे सकता है?
वोयूरू

जवाबों:


269

आप एक शैली बना सकते हैं,

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

और इसे अपनी गतिविधि के लिए विषय के रूप में सेट करें:

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

आप कस्टम प्रविष्टि को निर्दिष्ट करने और एनिमेशन से बाहर निकलने के लिए एक शैली को भी परिभाषित कर सकते हैं। http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation


धन्यवाद, यह विशेष रूप से पारदर्शी / संवाद थीम्ड गतिविधियों के लिए बहुत अच्छा काम करता है, एक अलग कार्य संबंध के साथ पुनरावृत्ति से बाहर रखा गया है। इसके बिना एनीमेशन एक डायलॉग को खोलने के लिए बहुत ही अजीब परिणाम बनाते हुए दिखाते रहे!
3c71

यह अब लॉलीपॉप / एंड्रॉइड 5.0 के लिए काम नहीं करता है?
केनीई

मेरे पास Android 5 है और यह मेरे लिए काम करता है। मेरी ऐप शैली कुछ इस तरह दिखती है: <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> <आइटम का नाम = "android: windowAnimationStyle"> @ null </ item> </ style>
eatyourgreens

6.0 में भी पूरी तरह से काम करता है। एक बेहतरीन टिप। जैसा कि मैंने नीचे पूछा, मुझे आश्चर्य है कि एनीमेशन को कैसे निष्क्रिय किया जाए जो तब होता है जब * पहली बार एक ऐप लॉन्च किया जाता है ... क्या कोई रास्ता है?!
फेटी

5
अगर आप
AppCompatActivity का

191

यदि आपका संदर्भ एक गतिविधि है, जिसे आप ओवरराइडिंगट्रीशन कह सकते हैं :

प्रारंभ (इंटेंट) के स्वादों में से एक के तुरंत बाद कॉल करें या अगले प्रदर्शन करने के लिए एक स्पष्ट संक्रमण एनीमेशन निर्दिष्ट करने के लिए समाप्त करें।

तो, प्रोग्रामेटिक रूप से:

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

क्या यह अदब के माध्यम से भी संभव है?
Android डेवलपर

@TalAngel को overridePendingTransitionएपीआई स्तर 5 में जोड़ा गया था। इसलिए नहीं, यह "हर" एंड्रॉइड संस्करण पर काम नहीं करता है, लेकिन मुझे लगता है कि आप उच्च एपीआई स्तर को लक्षित करते हैं फिर 5.
ब्रूनो बीरी


24

आप इसे केवल उन सभी गतिविधियों में भी कर सकते हैं, जिनसे आप संक्रमण नहीं करना चाहते हैं:

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

मुझे यह दृष्टिकोण पसंद है क्योंकि आपको अपनी गतिविधि की शैली के साथ गड़बड़ नहीं करना है।


एक बेहतरीन टिप। मुझे आश्चर्य है कि एनीमेशन को कैसे निष्क्रिय किया जाए जो तब होता है जब * पहली बार एक ऐप लॉन्च करना ... क्या कोई रास्ता है!
फटी

@ फैटी आपकी लॉन्चिंग गतिविधि की ऑनस्टार्ट () विधि को ओवरराइड करता है और उसी कोड को उसमें रखता है।
जावद आदिल

5

यह एक उदाहरण का उपयोग या उपयोग करने के तरीके का स्पष्टीकरण नहीं है FLAG_ACTIVITY_NO_ANIMATION, हालांकि यह उत्तर देता है कि Activityस्विचिंग एनीमेशन को कैसे अक्षम किया जाए , जैसा कि प्रश्न शीर्षक में पूछा गया है:

एंड्रॉइड, एक नई गतिविधि शुरू करते समय 'वाइप' प्रभाव को कैसे अक्षम करें?


4

यहां एक-लाइनर समाधान है minSdkVersion 14जो उतना ही काम करता है जितना कि आप में डालना चाहिए res/styles.xml:

<item name="android:windowAnimationStyle">@null</item>

इस तरह:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:windowAnimationStyle">@null</item>
    </style>
    ...
</resources>

चीयर्स!


3

थीम शैली में रेखा ठीक काम करती है, फिर भी वह एनीमेशन को एक सफेद स्क्रीन के साथ बदल देती है। विशेष रूप से एक धीमे फोन पर - यह वास्तव में कष्टप्रद है। इसलिए, यदि आप एक त्वरित संक्रमण चाहते हैं - आप इसे विषय शैली में उपयोग कर सकते हैं:

<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>

2

एंड्रॉइड ओवरराइड करने की अपनी शैली बनाएं: थीम

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

फिर इसे इस तरह प्रकट करें:

<activity android:name=".MainActivity"
    android:theme="@style/noAnimationStyle">
</activity>

0

इरादा शुरू करने के बाद आप इस कोड का उपयोग कर सकते हैं:

Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);

यदि उपयोग किया जाता है, तो इरादा बिना किसी एनिमेशन या संक्रमण के साथ काम करेगा

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