ক্রিয়াকলাপ স্থানান্তরগুলি ভাগ করে নেওয়া উপাদানগুলির স্থানান্তরের সাথে হস্তক্ষেপ থেকে সম্পূর্ণরূপে প্রতিরোধ করে:
উপস্থিত থাকা ক্রিয়াকলাপে getWindow ()। SetExitTransition (নাল) কল করুন;
প্রবেশের ক্রিয়াকলাপে getWindow ()। SetEnterTransition (নাল) কল করুন;
Https://stackoverflow.com/a/34907685/967131 থেকে
আমার সন্দেহ হয় এর পার্শ্ব প্রতিক্রিয়া থাকতে পারে, তবে নিশ্চিত করে জানিনা। এটি মৃত সহজ এবং যদিও কাজ করে।
নির্দিষ্ট উপাদানগুলিকে ঝলকানো থেকে বিরত রাখুন:
আমি অ্যালেক্স লকউডের উত্তর দিয়ে শুরু করেছিলাম এবং এটি কার্যকর করার চেষ্টা করার জন্য আমি মোটামুটি পরীক্ষা-নিরীক্ষা করেছি। এর মূলটি সঠিক, যদিও আমার ক্রিয়াকলাপ গ্রহণের জন্য প্রস্তাবিত কোডটির প্রয়োজন ছিল না, তবে আমি এটিকে কোনও ক্রিয়াকলাপের পরিবর্তে (ক্রিয়াকলাপের পরিবর্তে) কল করে এবং অ্যাকশন বার হিসাবে একটি সরঞ্জামদণ্ড সেট করে কিছু সমস্যার মধ্যে পড়েছিলাম।
ওহ, টুকরা জিনিস? আমি প্রচুর মন্তব্য দেখেছি যে স্থিতি দণ্ড এবং নেভিগেশন বারের উল্লেখগুলি পুনরুদ্ধার করার চেষ্টা করা বাতিল ছিল ull আমার ক্ষেত্রেও একই ঘটনা ঘটেছে, যতক্ষণ না বুঝেছি আমি খণ্ডগুলির বিন্যাসে সেগুলি খুঁজে পাব না ... তারা সেই স্তরের উপরে ছিল। অতএব, ক্রিয়াকলাপ থেকে সজ্জা দর্শন পেতে নীচের কোডটি এবং এটি অনুসন্ধান করুন। তখন আমি তাদের কোনও সমস্যা ছাড়াই পেয়েছি।
শেষ পর্যন্ত, আমি এই ইউটিলিটি পদ্ধতিটি বিকাশ করেছি:
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 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**));
যতক্ষণ না এটি আপনার এক্সএমএলের সাথে মেলে ততক্ষণ মানগুলি ব্যবহার করুন।
এটি স্থিতি দণ্ড, সরঞ্জাম দণ্ড এবং নেভিগেশন বার (পিছনে / হোম / সাম্প্রতিক অ্যাপ্লিকেশন বোতাম) স্থানান্তরকালে ফ্ল্যাশিং থেকে বাধা দেয়। ক্রিয়াকলাপের বাকী অংশটি স্বাভাবিক।
আমার ক্ষেত্রে, আমাদের অ্যাপ্লিকেশন থিমের android:windowBackground
নীল রঙ রয়েছে। এটি রূপান্তরটিতে একটি নীল ফ্ল্যাশ সৃষ্টি করে, যা বেশ হতাশাব্যঞ্জক। পরিবর্তে এর পরিবর্তে পুরো অ্যাপ্লিকেশনটিকে প্রভাবিত করে, আপাতত আমি প্রথম, দ্রুত এবং নোংরা বিকল্পটি নিয়ে যাচ্ছি।