18

मैं एक खंड पर setEnterTransition पर नए लॉलीपॉप एपीआई का उपयोग कर रहा हूं और फिर खंड में किसी छवि के लिए साझा तत्व संक्रमण जोड़ता हूं। वांछित व्यवहार सबसे पहले है, छवि को अपनी स्थिति में ले जाना चाहिए, जिसके बाद खंड में शेष विचारों को फीका होना चाहिए।साझा तत्व के साथ एक टुकड़े पर संक्रमण दर्ज करें साझा तत्व

हालांकि, एंटर ट्रांज़िशन साझा तत्व पर लागू किया जा रहा है, इसलिए यह लुप्त हो रहा है बाकी विचार अगर मैं एंटर ट्रांज़िशन सेट नहीं करता हूं, तो छवि ठीक से चलती है लेकिन जब यह दूसरी सामग्री को ले जा रही है, यह पहले से ही दिखाई दे रही है।

साझा दृश्य में प्रवेश ट्रांज़िशन लागू करने के लिए मैं इसे कैसे प्राप्त करूं?

मुझे this commit in the AOSP मिला जो ऐसा लगता है कि इसे इस मुद्दे को हल करना चाहिए, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है।

public class Fragment1 extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.main_fragment, container, false); 
    final ImageView imageView = (ImageView) rootView.findViewById(R.id.image); 
    final Button button = (Button) rootView.findViewById(R.id.button); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     TransitionSet transitionSet = new TransitionSet(); 
     transitionSet.addTransition(new ChangeImageTransform()); 
     transitionSet.addTransition(new ChangeBounds()); 
     transitionSet.setDuration(300); 

     Fragment fragment2 = new Fragment2(); 
     fragment2.setSharedElementEnterTransition(transitionSet); 
     fragment2.setSharedElementReturnTransition(transitionSet); 
     Fade fade = new Fade(); 
     fade.setStartDelay(300); 
     fragment2.setEnterTransition(fade); 

     getFragmentManager().beginTransaction() 
      .replace(R.id.container, fragment2) 
      .addSharedElement(imageView, "SharedImage") 
      .commit(); 
     } 
    }); 
    return rootView; 
    } 
} 

उत्तर

21

दर्ज संक्रमण साझा तत्व विचारों लागू नहीं करना चाहिए:

यहाँ नमूना कोड है। सबसे संभावित परिदृश्य यह है कि आपका साझा तत्व पृष्ठभूमि के साथ किसी अन्य दृश्य के भीतर है, जिससे उस परिवर्तन को प्रवेश संक्रमण से प्रभावित किया जाता है। यह इस तरह की स्थिति है:

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#FFF" 
    > 
    <ImageView android:src="@drawable/pretty_picture" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:transitionName="picture" 
     android:padding="20dp"/> 
</FrameLayout> 

यहां, छवि दृश्य साझा तत्व है।

यदि ऐसा होता है, तो आप एक जादू संक्रमण जोड़ना चाहेंगे: ChangeTransform। यदि यह पता चलता है कि अभिभावक बदलता है, तो यह साझा तत्व को माता-पिता से निकाल देगा और इसे अलग से संक्रमण करेगा।

+1

जॉर्ज, मैं आपको चूम सकता था! यह मेरे विचारों को मेरे विचारों के साथ हमेशा दूसरे खंड में स्क्रीन के शीर्ष से दूसरी एग्जिकमेंट में शुरू करने के बजाय शुरू करता है, जहां से वे पहले खंड में स्थित थे। यहां मेरे प्रश्न का एक लिंक है (यह टिप्पणियों का एक टन) धन्यवाद! http://stackoverflow.com/questions/26950801/shared-elements-animating-between-fragments – brockoli

+0

जॉर्ज, क्या यह प्रारंभ में 'चेंजट्रांसफॉर्म' का उपयोग करने का इरादा था? या क्या इस मामले को कवर करने के लिए इसका विशिष्ट कार्यान्वयन होता है? ऐसा लगता है कि 'चेंजट्रांसफॉर्म' का उपयोग करके जादूगर रूप से चीजों को ठीक कर दिया जाएगा। क्या इस मामले को कवर करने के लिए 'चेंजबाउंड', 'चेंज इमेज ट्रान्सफॉर्म' इत्यादि का कोई कारण भी लागू नहीं किया गया है? –

+0

हां। संक्रमण आमतौर पर गुणों का एक छोटा सा सेट एनिमेट करते हैं ताकि संक्रमण को वांछित के रूप में जोड़ा जा सके। हमें उस मामले को संभालने की ज़रूरत थी जहां माता-पिता और बच्चे संक्रमण अलग-अलग थे। चूंकि इसके लिए समान गुणों को एनिमेटेड होना आवश्यक है, इसलिए हमें प्रतीत होता है कि अलग-अलग संक्रमणों को विलय करना पड़ा। –

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