5

साझा तत्व संक्रमण को आसानी से चलाने के लिए, मुझे अपनी गंतव्य गतिविधि में भारी प्रारंभिक स्थगित करने की आवश्यकता है। नीचे दिए गए कोड देखें:हम कैसे जान सकते हैं कि गतिविधि साझा तत्व संक्रमण चल रहा है?

getWindow().setSharedElementEnterTransition(enterTransition); 
enterTransition.addListener(new Transition.TransitionListener() { 
    @Override 
    public void onTransitionEnd(Transition transition) { 
     init(); 
    } 
}); 

हालांकि, अगर यह गतिविधि या किसी अन्य गतिविधि उस तत्व साझा नहीं किए हैं Deep link से शुरू कर दिया है। संक्रमण कभी शुरू नहीं होता है, इस प्रकार onTransitionEnd() कभी नहीं कहा जाता है और init() कभी नहीं चलाएगा। उस स्थिति में, गतिविधि शुरू होने के तुरंत बाद मुझे init() पर कॉल करना चाहिए।

मुझे कैसे पता चलेगा कि संक्रमण चल रहा है?


संपादित मैं भी अगर साझा तत्व संक्रमण उपलब्ध नहीं है एक और संक्रमण में प्रवेश चलाना चाहते हैं। तो नीचे दिए गए उत्तर दें कि postponeEnterTransition() का उपयोग करने का सुझाव मेरे मामले के लिए काम नहीं करता है।

उत्तर

0

ऐसा लगता है कि आप अपनी प्राप्त गतिविधि में क्रेट (या कहीं और) में पोस्टपोन एंटर ट्रांज़िशन() को कॉल करने से बेहतर होगा, उस कॉल के बाद सभी भारी init() को कार्यान्वित करेंगे, और एक बार स्पष्ट रूप से स्टार्टपोस्टन एंटर ट्रान्सिशन() को कॉल करके संक्रमण पकड़ जारी करेंगे init किया जाता है। यदि गतिविधि शुरू करने के लिए आवश्यक कोई साझा संक्रमण नहीं है, जैसे कि दीपलिंक और इत्यादि, यह सीधे बिना किसी देरी के आपके भारी इनिट पर जायेगा।

यहाँ कोड है: - शुरू होता साझा तत्व संक्रमण

Intent ActivityDemoOneBIntent = new Intent(ActivityDemo1A.this, ActivityDemo1B.class); 
String transitionName = getString(R.string.activityTransitionName); 
Bundle optionsBundle = getTransitionOptionsBundle(imageViewAnimated, transitionName); 
startActivity(ActivityDemoOneBIntent, optionsBundle); 

गतिविधि बी -

गतिविधि ए 'प्राप्त करता है "साझा तत्व संक्रमण

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_demo_1_b); 
    postponeTransition(); // postpone shared element transition until we release it explicitly 

    // Do all heavy processing here, activity will not enter transition until you explicitly call startPostponedEnterTransition() 

    // all heavy init() done 
    startPostponedTransition() // release shared element transition. This can be placed to your listeners as well. 
} 

private void postponeTransition() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     postponeEnterTransition(); 
    } else { 
     ActivityCompat.postponeEnterTransition(this); 
    } 
} 

private void startPostponedTransition() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     startPostponedEnterTransition(); 
    } else { 
     ActivityCompat.startPostponedEnterTransition(this); 
    } 
} 
संबंधित मुद्दे