2011-11-30 9 views
30

मैं जानता हूँ कि मैं सही startActivity() या खत्म()एंड्रॉइड एप्लिकेशन में एक बार में सभी गतिविधि संक्रमण कैसे बदलें?

activity.overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);

के बाद निम्नलिखित कोड का उपयोग कर गतिविधि संक्रमण को बदल सकते हैं लेकिन अगर मैं मेरे एप्लिकेशन में दस गतिविधियों है, मुझे लगता है कि दस बार क्या करना है; और इसे संशोधित करना काफी मुश्किल है। तो मैं सोच रहा हूं कि आवेदन के भीतर सभी गतिविधियों के लिए एक बार में संक्रमण स्थापित करने का कोई तरीका है या नहीं। क्या AndroidManifest.xml में कोई संबंधित कॉन्फ़िगरेशन है?

धन्यवाद!

उत्तर

52

आप पहली रेस में एक <style>/styles.xml, इस तरह बनाना चाहते हैं:

<style name="YourTheme" parent="android:Theme.Translucent"> 
     ... 
     <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item> 
    </style> 

:

<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity"> 
     <item name="android:windowEnterAnimation">@anim/your_in_down</item> 
     <item name="android:windowExitAnimation">@anim/your_out_down</item> 
    </style> 

तो फिर तुम शैली एक विषय के लिए, एक ही फाइल में आवेदन कर सकते हैं और अंततः मैनिफेस्ट में अपनी गतिविधियों के लिए विषय लागू करें:

<activity 
     android:name=".YourActivity" 
     android:theme="@style/YourTheme" /> 

इन लिंक को देखें आर संदर्भ:

+20

यह काम करता है! दरअसल, मैं थोड़ा सा बदलता हूं: ' ' –

+0

@DavidLiu, खुले एनिमेशन देखो की तरह वे काम कर रहे हैं, लेकिन करीब एनिमेशन प्रभाव में लाने के न – toobsco42

+0

@GenLiu तुम मुझे अपनी दिखा सकते हैं। एक्सएमएल उदाहरण? मैं सिर्फ –

13

मैं जानता हूँ कि यह उत्तर दिया गया है, लेकिन यहाँ है कि मैं क्या खान में किया था। हम अभी भी एपीआई 14 का समर्थन करते हैं, इसलिए कुछ एनिमेशन गायब हैं कि मुझे एपीआई 22 (slide_in_right, slide_out_left) से प्रोजेक्ट में खींचना पड़ा। जब आप एक नई गतिविधि खोलते हैं और बाएं को बंद करने वाले स्लाइड को स्लाइड करते हैं तो स्क्रीन में स्लाइड करना क्या होता है। जब आप वापस दबाएंगे तो यह विपरीत होगा, पिछली स्क्रीन के बाएं से स्लाइडिंग और वर्तमान स्क्रीन के दाईं ओर बंद हो जाएगा।

<style name="YourTheme" parent="android:Theme.Translucent"> 
    ... 
    <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item> 
</style> 

<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity"> 
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> 
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
    <item name="android:activityCloseEnterAnimation">@android:anim/slide_in_left</item> 
    <item name="android:activityCloseExitAnimation">@android:anim/slide_out_right</item> 
</style> 
+0

इसकी एपीआई 22 लाइब्रेरी से सीधे, एपीआई 22 के लिए स्रोत डाउनलोड करें और यह एनीमेशन फ़ोल्डर में होगा। – JPM

6

मेरा समाधान ज्यादातर जेपीएम उत्तर की तरह है। लेकिन यहां कुछ अतिरिक्त फ़ाइल है जिसके लिए आपको आवश्यकता हो सकती है।

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorPrimary</item> 
    <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> 

</style> 

<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity"> 
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> 
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
    <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item> 
    <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> 
</style> 

रेस फ़ोल्डर के अंतर्गत anim फ़ोल्डर बनाएँ और फिर इस चार एनीमेशन फ़ाइलों को बनाने:

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="-100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 
+0

यह कम से कम नहीं है, कम से कम एंड्रॉइड 6 (हुवाई पी 8) – qkx

+0

यह मेरी हुवेई जीप्ले मिनी (एंड्रॉइड 6) और नेक्सस 9 (एंड्रॉइड 7) में आसानी से काम कर रहा है। कृपया इस प्रोजेक्ट को चलाएं: https://github.com/ShohanAhmed/Android-Activity- ट्रांज़िशन- कस्टम- एनीमेशन –

+0

मैंने किसी समस्या की जांच की, और आप आंशिक रूप से सही हैं। यह मेरे फोन पर भी चल रहा है, लेकिन केवल जब आप गतिविधि से इरादा (नई गतिविधि दिखाने के लिए) कहते हैं। यदि आप विजेट से कुछ गतिविधि खोलना चाहते हैं और लंबित इरादे का उपयोग करना चाहते हैं, तो यह वहां काम नहीं कर रहा है। इस मामले में एकमात्र विकल्प कोड में प्रोग्राम्सिक रूप से एनीमेशन सेट करना है जैसे कि मैंने मूल रूप से उल्लेख किया है .... – qkx

संबंधित मुद्दे