एनीमेशन के माध्यम से एक गतिविधि में स्वैप टुकड़ा


94

मैं एनीमेशन के माध्यम से एक गतिविधि में दो टुकड़े को स्वैप करना चाहता हूं। पेजेज़ को स्क्रीन पर ए और बाईं ओर घर्षण ए के लिए है और पेज बी स्क्रीन के दाईं ओर टुकड़े बी यानी के लिए है। अब मैं चाहता हूं कि जब मैं पेजए पर एक बटन क्लिक करूं तो पेजए स्क्रीन के दाईं ओर कुछ संक्रमण एनीमेशन के साथ चला जाएगा।

मैंने स्थिति को बदलने के लिए नीचे दिए गए कोड की कोशिश की

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, new FragB());
fragmentTransaction.commit();

कुछ सुराग तलाश रहे हैं।

अग्रिम में धन्यवाद।


जवाबों:


282

पुरानी खोज और आप शायद पहले ही इसका पता लगा चुके हैं, लेकिन भविष्य के संदर्भ के लिए:

जब आप कोड के माध्यम से एक टुकड़े को प्रतिस्थापित करते हैं तो आप एक कस्टम एनीमेशन सेट करने के लिए क्या उपयोग करते हैं:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.fragment_container, newFragment, "fragment");
// Start the animated transition.
ft.commit();

यहाँ स्लाइड का एक उदाहरण___ एनीमेशन है:

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

ध्यान दें कि यह एनीमेशन है यदि आप संगतता पुस्तकालय का उपयोग कर रहे हैं। इसके बजाय यदि आप FragmentManager के लिए देशी समर्थन के साथ SDK का उपयोग कर रहे हैं तो आपका एनीमेशन इस तरह दिखाई देगा:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="x" 
    android:valueType="floatType"
    android:valueFrom="-1280"
    android:valueTo="0" 
    android:duration="500"/>
</set>

ऐसा इसलिए है क्योंकि संगतता लाइब्रेरी नए ऑब्जेक्टअनीमेटर प्रकार का समर्थन नहीं करती है और इसके बजाय केवल पुराने एनीमेशन फ्रेमवर्क को लागू करती है।


92
यह निश्चित रूप से सही उत्तर है। ध्यान दें कि आदेश मायने रखता है! ऐड / रिप्लेस कॉल से पहले आपको setCustomAnimations () कॉल करना होगा!
इफिस्माइक

2
यदि यू सबसे अच्छा COMP चाहते हैं तो आपको किस दृष्टिकोण का उपयोग करना चाहिए?
बसिकारल

17
ये अलग-अलग एनिमेशन बिल्कुल बराबर नहीं हैं। आप मान रहे हैं कि -1280 के मान से आपके टुकड़े की चौड़ाई 1280 के बराबर है। यदि चौड़ाई अधिक थी तो यह पूरी तरह से स्क्रीन से शुरू नहीं होगी।
जैसे

51
यू इसके बजाय एंड्रॉइड नेमस्पेस से पूर्वनिर्धारित एनिमेशन का उपयोग कर सकते हैं: transaction.setCustomAnimations (android.R.anim.slide_in_left, android.R.anim.slide_out_right);
जॉर्डन

2
पूर्वनिर्धारित एनिमेशन एक रनटाइमएक्सेप्शन, एफडब्ल्यूआईडब्ल्यू को ट्रिगर करते हैं, क्योंकि वे "अनुवाद" टैग पर भरोसा करते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.