42

मैं एंड्रॉइड 2.2 डिवाइस और ऊपर के लिए विशेष रूप से टुकड़ों का उपयोग करके टैबलेट यूआई विकसित करने के लिए v4 एंड्रॉइड संगतता लाइब्रेरी का उपयोग कर रहा हूं।फ्रैगमेंट मानक संक्रमण एनिमेटिंग

सबकुछ काम कर रहा है जैसा कि इसे करना चाहिए, सिवाय इसके कि मुझे काम करने के लिए कोई एनिमेशन नहीं मिल सकता है, यहां तक ​​कि मानक एनिमेशन भी नहीं।

कोड:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    ABCFragment abcFragment = new ABCFragment(); 
    ft.replace(R.id.main_frame_layout_fragment_holder,abcFragment);  
    ft.addToBackStack(null); 
    ft.commit(); 

बजाय एक पारगमन एनीमेशन का उपयोग कर के, खंड के बारे में एक पल के लिए जमा और बस गायब हो जाता है और नया एक प्रकट होता है।

का उपयोग करना:

ft.setCustomAnimations(android.R.anim.slide_in_left,android.R.anim.slide_out_right); 

या तो काम नहीं करता।

एक्सएमएल:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res/com.synergygb.mycustomapp" 
android:id="@+id/LinearLayout01" android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:orientation="vertical" 
android:gravity="bottom"> 
<FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main_frame_layout_fragment_holder"> 
</FrameLayout> 
<!-- OTHER FIXED UI ELEMENTS--> 
</RelativeLayout> 

मैंने पढ़ा है कि कस्टम एनिमेशन संगतता पुस्तकालय में टूट गए, लेकिन कोई भी मानक बदलाव के साथ मुद्दों कर किया जा रहा है। मैं एक 3.2.1 Motorola Xoom, 2.3 गैलेक्सी टैब 7 ", 2.2 एम्युलेटर पर यह परीक्षण किया है, और यहां तक ​​कि 2.3.4 के साथ एक HTC G2 पर।

यहाँ क्या गलत हो सकता है?

+0

क्या दल्विक (डीबगर) आपको कुछ दे रहा है? – IAmYourFaja

+0

क्या आपके पास हमें देने के लिए कोई लॉगकट आउटपुट है? –

+0

कुछ भी नहीं, यही कारण है कि मैं खो गया। त्रुटियाँ नहीं। Logcat कुछ भी नहीं दिखाता है। सिस्टम की बस नियमित कॉलबैक, इन-एप परिवर्तनों से संबंधित कुछ भी नहीं चल रहा है। mtrransition के मान की जांच करने से यह = 4099. यह मान इस प्रकार सेट किया गया है: ft.setTransition (FragmentTransaction.TRANSIT_FRAGMENT_FADE); – blindstuff

उत्तर

35

मैं अंत में यह मिल गया। बहुत परीक्षण के बाद काम करने के लिए और ई rror।

सबसे पहले और सबसे महत्वपूर्ण, सबसे अच्छा एसीएल प्राप्त करें, यह कस्टम एनिमेशन को ठीक करता है, और यह मेरी सही समस्या नहीं थी, एक बार काम करने के बाद मैंने मानक संक्रमणों के बजाय उनका उपयोग समाप्त कर दिया।

अभी का उपयोग कर im:

ft.setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out,android.R.anim.fade_in,android.R.anim.fade_out); 

इस पर काम कर रही है ये दोनों उपाय Android 2.1, 2.2 और 2.3, साथ ही Android 3.0 निम्न करने के लिए था के रूप में:

  • मेक सुनिश्चित करें कि आप केवल एपीआई स्तर का उपयोग कर रहे हैं जो निम्नतम एपीआई स्तर पर उपलब्ध है जिसे आप समर्थन देना चाहते हैं (मेरे मामले में 2.1)।
  • Android 3.0 का उपयोग करके संकलित करें।
  • मैनिफेस्ट फ़ाइल में, अपने एप्लिकेशन टैग के अंदर android:hardwareAccelerated="true" सेट करें।

फ्रैगमेंट एनिमेशन अब सभी उपकरणों पर काम करते हैं। यदि आप एप्लिकेशन टैग में अतिरिक्त जानकारी सेट नहीं करते हैं, तो एनीमेशन ओकुर होगा, लेकिन बहुत ही चतुर तरीके से, ऐसा लगता है कि ऐसा नहीं हुआ।

उम्मीद है कि यह भविष्य में किसी की मदद करेगा!

एक नोट के रूप में, कुछ एपीआई जांच उपकरण हैं इसलिए आप सुनिश्चित हैं कि आप किसी भी एपीआई का उपयोग नहीं कर रहे हैं जो आपके लिए उपलब्ध नहीं है। मैं 2 पर काम करना पसंद करता हूं।1 इसलिए आईडीई कुछ भी नहीं दिखाता है जिसका उपयोग मैं नहीं कर सकता, एक बार मेरे पास स्थिर कोड हो जाने पर मैं 3.0

+0

इस उत्तर के लिए धन्यवाद, मैं एक एसआईआई, एचटीसी ईवो, नेक्सस गैलेक्सी और एक एसआईआईआई पर परीक्षण कर रहा हूं और नेक्सस को एनीमेशन को कम करने के लिए भयानक था, हार्डवेयर टैग के साथ सबकुछ अपेक्षित व्यवहार करता है :) – Goofyahead

+0

@blindstuff अगर आप नहीं हैं एपीआई स्तर में किसी भी कोड का उपयोग करके आप सबसे कम समर्थन कर रहे हैं, किसी नए एपीआई के खिलाफ संकलन करने की कोई आवश्यकता नहीं है। एक नई एपीआई के खिलाफ संकलन करने वाली एकमात्र चीज आपको नई कक्षाओं और विधियों तक पहुंच प्रदान करती है। –

+2

आपको एंड्रॉइड: हार्डवेयर एक्सेलेरेटेड = "सत्य" पहचानने के लिए 3.0 या ऊपर संकलित करने की आवश्यकता है। – blindstuff

32

हो रही कोशिश करो सबसे हाल ही में एसीएल फिर, वे इसे तय कर दी है: http://code.google.com/p/android/issues/detail?id=15623#c19

भी मैंने देखा है कि setCustomAnimations के लिए, यह लेन-देन से पहले प्रभावी होने के लिए में की जगह की तरह कॉल निर्धारित करने की आवश्यकता

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.setCustomAnimations(R.anim.in_from_left, R.anim.out_to_right, R.anim.in_from_right, R.anim.out_to_left); 
ft.replace(android.R.id.content, newFrag); 
ft.addToBackStack(null); 
ft.commit(); 
+0

मैंने आपके द्वारा वर्णित दोनों चीजें की हैं, मैंने कहा है कि टिप्पणियों में मेरे प्रश्न का पालन करना है। मुझे यह पहले से ही काम करने के लिए मिला है, लेकिन मैं जवाब देने से पहले परीक्षण कर रहा हूं कि 100% निश्चित नहीं हूं। मुझे एक्सओओएम पर गैलेक्सी टैब के साथ काम करने के लिए मिला है, एनिमेशन एनीमेशन बकवास की तरह दिखते हैं। – blindstuff

+0

क्षमा करें, मैं अन्य लोगों की पोस्ट पर टिप्पणी नहीं कर सका (पर्याप्त प्रतिष्ठा नहीं)। हालांकि आप इसे हल करने के लिए खुशी हुई! – dvd

+0

आपकी मदद के लिए धन्यवाद, +1, यह 'ft.setCustomAnimations (R.anim.in_from_left, R.anim.out_to_right, R.anim.in_from_right, R.anim.out_to_left) का उपयोग करने में सहायक था; इसके बजाए बस 'ft.setCustomAnimations (R.anim.in_from_left, R.anim.out_to_right);' – blindstuff

0

पर संकलन करने के लिए वापस कूदता हूं उम्मीद है कि यह किसी की सहायता करेगा। एपीआई दस्तावेज़ों का उपयोग खंड एनीमेशन के लिए ऑब्जेक्टएनिमीटर का उपयोग करता है, लेकिन नवीनतम संगतता पैकेज ऑब्जेक्ट के साथ भी एक्सएमएल में एनीमेटर संकलक द्वारा स्वीकार नहीं किया गया था।

यह मेरे लिए काम करता है:

Android 3.0 के लिए या उच्चतर: रेस में/एनिमेटर फ़ोल्डर एक्सएमएल ObjectAnimator घोषणा करते हैं।

3.0 से कम के लिए संगतता पैकेज के साथ: res/anim फ़ोल्डर में xml एनीमेशन घोषित करें।

3

टुकड़ा के लिए top_to_bottom एनीमेशन प्रदर्शन करने के लिए,

नीचे

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.setCustomAnimations(R.anim.top_to_bottom_fragment, 
android.R.animator.fade_out); ft.replace(R.id.simple_fragment, 
fragment); 
ft.commit(); 

top_to_bottom_fragment.xml करने के लिए शीर्ष करने के लिए एक ही पालन

<objectAnimator android:duration="400" android:valueFrom="-800" 
    android:valueTo="0" android:propertyName="y" 
    android:valueType="floatType" 
    xmlns:android="http://schemas.android.com/apk/res/android" /> 

जहां valueFrom="-800" अपने टुकड़ा लेआउट के नीचे संकेत मिलता है।

3

मैंने Google समर्थन लाइब्रेरी में NineOldAndroids समर्थन जोड़ा है। विवरण के लिए http://www.github.com/kedzie/Support_v4_NineOldAndroids देखें। यह फ्रैगमेंट ट्रांज़िशन, पेज ट्रांसफॉर्मर्स और कुछ अन्य सामानों के लिए प्रॉपर्टी एनीमेशन का उपयोग करने की अनुमति देता है।

2

आपको से पहले आपको खंड जोड़ना होगा। यह विभिन्न एनिमेशन के साथ कई टुकड़े जोड़ने की अनुमति देता है।

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