2012-02-15 17 views
36

जो मैं प्राप्त करने का प्रयास कर रहा हूं वह प्रारंभ गतिविधि एनीमेशन को ओवरराइड करना है।संक्रमण के दौरान पुराने गतिविधि के पीछे नई गतिविधि बनाएं

एनीमेशन को यह इंप्रेशन देना चाहिए कि पुरानी गतिविधि नई गतिविधि के शीर्ष पर है, और फिर नई गतिविधि को प्रकट करने के लिए स्क्रीन से नीचे और बाहर स्लाइड करती है। मैंने overridePendingTransition(startAnim, exitAnim) का उपयोग करने के कई तरीकों की कोशिश की है लेकिन समस्या यह है कि वे दोनों एक ही समयरेखा में एनिमेट करते हैं। तो overridePendingTransition(R.anim.hold, R.anim.exit_slide_down); आप बाहर निकलने वाली एनीमेशन कभी नहीं देखते हैं क्योंकि नई गतिविधि शीर्ष पर है। क्या ढांचे का उपयोग करके इसे हासिल किया जा सकता है?

enter image description here

+0

मेरा मानना ​​है कि आप देरी कर सकते हैं एक एनीमेशन, हालांकि अधिक मदद नहीं होने के लिए खेद है। – Warpzit

+0

संभावित डुप्लिकेट [क्या मैं एंड्रॉइड स्टार्ट एक्टिविटी() संक्रमण एनीमेशन बदल सकता हूं?] (Http://stackoverflow.com/questions/3515264/can-i-change-the-android-startactivity-transition-animation) –

उत्तर

31

असल में, मुझे एनीमेशन फ़ाइलों में android:zAdjustment नामक एक संपत्ति मिली है।

अगर मैं push_down_out.xml (स्क्रीन 1) में hold.xml (स्क्रीन 2) और android:zAdjustment="top" में android:zAdjustment="bottom" डाल तो मैं वांछित प्रभाव प्राप्त कर सकते हैं।

यह ज़ेड ऑर्डर समस्या के आसपास आता है (मुझे लगता है कि यह एनीमेशन समय के साथ एक मुद्दा था इसलिए मैं गलत पेड़ को भड़क रहा था)।

जॉन

+4

क्या आप कृपया शामिल कर सकते हैं कि आपकी एनीमेशन फाइल कैसी दिखती है? – Emil

+0

यह पता चला कि मेरा संक्रमण एनीमेशन क्यों नहीं खेल रहा था, या तो। एक अतिरिक्त बोनस के रूप में, मुझे केवल एंड्रॉइड जोड़ना पड़ा: zAdjustment = "शीर्ष" exitanimation (जिसे मैं शीर्ष पर खेलना चाहता था) में, इसलिए आपको "नीचे" की भी आवश्यकता नहीं है। – MacD

+0

@johncc क्या आप कृपया एक्सएमएल फाइलों और स्रोत कोड को शामिल कर सकते हैं? धन्यवाद! –

30

मैं एक नमूना परियोजना में अपने समाधान को सुलझाने की कोशिश कर रहा है और मैं इसे इस कोड के साथ काम कर ली:

कॉल के साथ एनीमेशन:

startActivity(new Intent(this, Activity2.class)); 
overridePendingTransition(R.anim.push_down_in,R.anim.push_down_out); 

R.anim .push_down_in:

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

R.anim.push_down_out:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="300"/> 
</set> 
+2

वास्तव में यदि आप प्रत्येक एनीमेशन के लिए अलग-अलग अवधि दें, यह वास्तव में शानदार प्रभाव देता है। उदाहरण के लिए R.anim.push_down_in: 'android: अवधि =" 900 "' और R.anim.push_down_out के लिए: 'android: अवधि =" 1500 "' – mehmet

7

समाधान है कि मेरे लिए काम करता है:

R.anim.exit_slide_down

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:zAdjustment="top"> 

    <translate android:fromYDelta="0" 
       android:toYDelta="100%p" 
       android:duration="600" /> 
</set> 

... और फिर

Intent intent = new Intent(activity, SecondActivity.class); 
startActivity(intent); 
activity.overridePendingTransition(0, R.anim.exit_slide_down); 
संबंधित मुद्दे