2012-06-14 15 views
67

मैं समर्थन पैकेज v4 के साथ Google API 8 (एंड्रॉइड 2.2) का उपयोग कर रहा हूं।एंड्रॉइड - विखंडन लेनदेन पर कस्टम एनीमेशन

यह कोई त्रुटि या एनीमेशन नहीं देता है।

लेन-देन:

FragmentTransaction transaction = manager.beginTransaction();  
transaction.replace(R.id.content, myFragment); 
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); 
transaction.commit(); 

एनिमेशन:

slide_in_left.xml

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

slide_out_right.xml

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

क्या किसी को पता है कि यहां क्या हो रहा है?

+1

हनीकॉम (एपीआई 11, एंड्रॉइड 3.0) तक फ्रैगमेंट्स पेश नहीं किए गए थे। यह समस्या हो सकती है, लेकिन मैंने सोचा होगा कि ग्रहण आपको बताएगा। –

+6

यही कारण है कि मैं समर्थन पैकेज का उपयोग कर रहा हूँ। – adheus

+0

[एंड्रॉइड में कस्टम एनीमेशन] (http://www.singhajit.com/android-custom-animations/) –

उत्तर

212

प्रबंधक एनीमेशन सेट करने से पहले मेरे लेनदेन को ढेर कर रहा था, इसलिए यह एनीमेशन (उदास लेकिन सत्य) के बिना लेनदेन को ढेर करता है, और यह तब भी होता है जब मैं setCustomAnimations() के बाद लेनदेन करता हूं।

समाधान पहले एनिमेशन स्थापित करने के लिए है:

FragmentTransaction transaction = manager.beginTransaction();  
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); 
transaction.replace(R.id.content, myFragment); 
transaction.commit(); 
+0

तो आपको स्वयं लौटा ऑब्जेक्ट चाल – sherpya

+0

@ शेरपाया से बचने वाले कथन को विभाजित करना होगा, आपका मतलब क्या है कि स्वयं वापस लौटा ऑब्जेक्ट चाल – toobsco42

+4

'license.something()। Someelse()। Replace()। Commit()', 'एंड्रॉइड विधियों में से कई' इस' को वापस लौटते हैं ताकि आप चर को पुनः टाइप करने से बच सकें, लेकिन किसी भी तरह से यहां एक साइड इफेक्ट का खुलासा किया गया है और 'setCustomAnimations() ' अलग से कहा जाना चाहिए – sherpya

12

जैसा कि ऊपर का सुझाव दिया, अलग बयान निश्चित रूप से काम करेंगे। लेकिन लेनदेन प्रकार को सेट करने से पहले चालsetCustomAnimation पर है। add, replace, आदि अन्यथा यह नहीं है। तो, एक ही तर्क लागू करना, method chaining भी काम करता है। जैसे।

getSupportFragmentManager().beginTransaction(). 
       setCustomAnimations(R.anim.a_slide_up, R.anim.a_slide_down, R.anim.a_slide_up, R.anim.a_slide_down). 
       add(R.id.root_layout, MyFrag.newInstance(). 
       addToBackStack("MyFrag"). 
       commit(); 

इसे यहाँ लाना है, ताकि कोई है जो method chaining पसंद यह उपयोगी पाता है। चीयर्स!

1

इसे यहां छोड़कर यह सबसे लोकप्रिय सवाल है। मुझे विखंडन लेनदेन के साथ एनिमेटिंग में एक ही समस्या थी। अपराधी में android:animateLayoutChanges विशेषता युक्त लेआउट में true पर विशेषता थी।

मुझे आशा है कि इससे किसी को समाधान की तलाश में कुछ समय बचाने में मदद मिलेगी क्योंकि विभिन्न फ़ाइलों में नेस्टेड लेआउट होने पर ध्यान देना मुश्किल हो सकता है।

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