साझा तत्व संक्रमण के साथ हस्तक्षेप से गतिविधि संक्रमण को पूरी तरह से रोकें:
बाहर निकलने की गतिविधि पर, कॉल getWindow ()। SetExitTransition (नल);
प्रवेश गतिविधि पर, कॉल getWindow ()। SetEnterTransition (नल);
से https://stackoverflow.com/a/34907685/967131
मुझे संदेह है कि इसके दुष्प्रभाव हो सकते हैं, लेकिन यह निश्चित रूप से नहीं पता है। यह मृत सरल है और यद्यपि काम करता है।
निमिष से विशिष्ट तत्वों को रोकें:
मैंने एलेक्स लॉकवुड के जवाब के साथ शुरुआत की और इसे काम में लाने की कोशिश करने के लिए बहुत कुछ प्रयोग किया। इसका मूल सही है, हालाँकि मुझे प्राप्त गतिविधि के लिए उनके द्वारा सुझाए गए कोड की आवश्यकता नहीं थी, लेकिन मैं इसे कुछ समस्याओं में एक फ्रैगमेंट (गतिविधि के बजाय) में और टूलबार को एक्शन बार के रूप में सेट करके चला गया।
बेनाम: ओह, बात बात है? मैंने बहुत सारी टिप्पणियाँ देखीं जो स्टेटस बार और नेविगेशन बार के संदर्भों को पुनः प्राप्त करने की कोशिश कर रही थीं। मेरे साथ भी ऐसा ही हुआ, जब तक मुझे एहसास हुआ कि मैं उन लोगों को फ्रेग्मेंट के लेआउट में नहीं पाऊंगा ... वे उस स्तर से ऊपर थे। इसलिए, गतिविधि से सजावट दृश्य प्राप्त करने के लिए नीचे दिए गए कोड और खोज करें। तब मैंने उन्हें बिना किसी समस्या के पाया।
अंत में, मैंने इस उपयोगिता विधि को विकसित किया:
public static Bundle transitionOptions(Activity activity, int transitionViewResId, int transitionNameResId) {
if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
return null;
}
View decorView = activity.getWindow().getDecorView();
View statusBar = decorView.findViewById(android.R.id.statusBarBackground);
View navigationBar = decorView.findViewById(android.R.id.navigationBarBackground);
View appBarLayout = decorView.findViewById(**R.id.appbarlayout**);
View transitionView = decorView.findViewById(transitionViewResId);
String transitionName = activity.getString(transitionNameResId);
List<Pair<View, String>> pairs = new ArrayList<>();
pairs.add(Pair.create(statusBar, Window.STATUS_BAR_BACKGROUND_TRANSITION_NAME));
pairs.add(Pair.create(navigationBar, Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME));
if (appBarLayout != null) {
pairs.add(Pair.create(appBarLayout, activity.getString(**R.string.transition_appbarlayout**)));
}
pairs.add(Pair.create(transitionView, transitionName));
//noinspection unchecked - we're not worried about the "unchecked" conversion of List<Pair> to Pair[] here
return ActivityOptionsCompat.makeSceneTransitionAnimation(activity, pairs.toArray(new Pair[pairs.size()]))
.toBundle();
}
नोट R.string.transition_appbarlayout और R.id.appbarlayout । जब तक वे आपके कोड का उपयोग करते हैं, तब तक ये आईडी मनमानी होती हैं। मेरे XML में, मैं कस्टम एक्शन बार को लेआउट की तरह (आवश्यक को नीचे संपादित) करता हूं:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
android:id="**@+id/appbarlayout**"
android:transitionName="**@string/transition_appbarlayout**">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"/>
</android.support.design.widget.AppBarLayout>
यदि आप इस तरह एक टूलबार का उपयोग नहीं करते हैं, तो उस भाग को उपयोगिता विधि से हटाया जा सकता है।
तब आप इसे अपने फ्रैगमेंट में जैसे कहेंगे:
startActivity(intent, UIUtils.transitionOptions(getActivity(),
R.id.**my_view**,
R.string.**transition_my_view**));
जब तक यह आपके XML से मेल खाता है, तब तक आप जो भी मान चाहते हैं उसका उपयोग करना
यह स्थिति पट्टी, टूल बार और नेविगेशन बार (बैक / होम / हाल के ऐप्स बटन) को संक्रमण के दौरान चमकने से रोकता है। बाकी गतिविधि संक्रमण सामान्य है।
मेरे मामले में, हमारे ऐप की थीम android:windowBackground
नीले रंग की है। यह संक्रमण में एक नीली चमक का कारण बनता है, जो काफी निराशाजनक है। लेकिन इसके बजाय एक परिवर्तन करें जो पूरे ऐप को प्रभावित करता है जैसे, अब मैं पहले, त्वरित और गंदे विकल्प के साथ जा रहा हूं।