স্প্ল্যাশ পর্দা

অ্যান্ড্রয়েড ১২ থেকে, SplashScreen এপিআই অ্যাপগুলোকে অ্যানিমেশন সহ চালু করার সুযোগ দেয়, যার মধ্যে রয়েছে অ্যাপ চালুর সময় একটি ইনটু-অ্যাপ মোশন, আপনার অ্যাপ আইকন দেখানো একটি স্প্ল্যাশ স্ক্রিন এবং সরাসরি আপনার অ্যাপে ট্রানজিশন। একটি SplashScreen হলো একটি Window এবং তাই এটি একটি Activity আবৃত করে রাখে।

চিত্র ১. একটি স্প্ল্যাশ স্ক্রিন।

স্প্ল্যাশ স্ক্রিন অভিজ্ঞতা প্রতিটি অ্যাপ লঞ্চে সাধারণ ডিজাইনের উপাদান নিয়ে আসে, তবে এটি কাস্টমাইজযোগ্যও, যাতে আপনার অ্যাপ তার নিজস্ব ব্র্যান্ডিং বজায় রাখতে পারে।

SplashScreen প্ল্যাটফর্ম API ব্যবহার করার পাশাপাশি, আপনি SplashScreen কম্প্যাট লাইব্রেরিও ব্যবহার করতে পারেন, যা SplashScreen API-কে র‍্যাপ করে।

স্প্ল্যাশ স্ক্রিন কীভাবে কাজ করে

যখন কোনো ব্যবহারকারী অ্যাপটির প্রসেস চালু না থাকা অবস্থায় ( কোল্ড স্টার্ট ) অথবা Activity তৈরি না হওয়া অবস্থায় ( ওয়ার্ম স্টার্ট ) অ্যাপটি চালু করেন, তখন নিম্নলিখিত ইভেন্টগুলো ঘটে:

  1. সিস্টেমটি আপনার নির্ধারণ করা থিম এবং অ্যানিমেশন ব্যবহার করে স্প্ল্যাশ স্ক্রিনটি প্রদর্শন করে।

  2. অ্যাপটি প্রস্তুত হয়ে গেলে স্প্ল্যাশ স্ক্রিনটি অদৃশ্য হয়ে যায় এবং অ্যাপটি প্রদর্শিত হয়।

হট স্টার্টের সময় স্প্ল্যাশ স্ক্রিনটি কখনোই দেখানো হয় না।

স্প্ল্যাশ স্ক্রিনের উপাদান এবং কার্যপ্রণালী

স্প্ল্যাশ স্ক্রিনের উপাদানগুলো অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলের এক্সএমএল রিসোর্স ফাইলের মাধ্যমে সংজ্ঞায়িত করা হয়। প্রতিটি উপাদানের লাইট এবং ডার্ক মোড সংস্করণ রয়েছে।

একটি স্প্ল্যাশ স্ক্রিনের পরিবর্তনযোগ্য উপাদানগুলো হলো অ্যাপ আইকন, আইকন ব্যাকগ্রাউন্ড এবং উইন্ডো ব্যাকগ্রাউন্ড।

একটি স্প্ল্যাশ স্ক্রিনে থাকা উপাদানগুলো দেখানো একটি ছবি।
চিত্র ২. স্প্ল্যাশ স্ক্রিনের পরিবর্তনযোগ্য উপাদানসমূহ।

চিত্র ২-এ দেখানো নিম্নলিখিত উপাদানগুলো বিবেচনা করুন:

অ্যাপ আইকনটি অবশ্যই একটি ভেক্টর ড্রয়েবল হতে হবে। এটি স্থির বা অ্যানিমেটেড হতে পারে। যদিও অ্যানিমেশনের সময়কাল সীমাহীন হতে পারে, আমরা ১,০০০ মিলিসেকেন্ডের বেশি না করার পরামর্শ দিই। লঞ্চার আইকনটি হলো ডিফল্ট।

আইকনের ব্যাকগ্রাউন্ড ঐচ্ছিক এবং এটি তখন কাজে লাগে যখন আইকন ও উইন্ডোর ব্যাকগ্রাউন্ডের মধ্যে আরও বেশি বৈসাদৃশ্যের প্রয়োজন হয়। আপনি যদি একটি অ্যাডাপ্টিভ আইকন ব্যবহার করেন, তবে উইন্ডোর ব্যাকগ্রাউন্ডের সাথে যথেষ্ট বৈসাদৃশ্য থাকলে এর ব্যাকগ্রাউন্ডটি প্রদর্শিত হয়।

অ্যাডাপ্টিভ আইকনের মতোই, ফোরগ্রাউন্ডের এক-তৃতীয়াংশ মাস্ক করা হয়।

উইন্ডোর ব্যাকগ্রাউন্ড একটিমাত্র অস্বচ্ছ রঙ দিয়ে গঠিত। যদি উইন্ডোর ব্যাকগ্রাউন্ড সেট করা থাকে এবং সেটি একটি সাধারণ রঙ হয়, তবে অ্যাট্রিবিউটটি সেট করা না থাকলে ডিফল্টরূপে সেটিই ব্যবহৃত হয়।

স্প্ল্যাশ স্ক্রিনের মাত্রা

স্প্ল্যাশ স্ক্রিন আইকনটি অ্যাডাপ্টিভ আইকনগুলোর মতোই একই স্পেসিফিকেশন ব্যবহার করে, যা নিম্নরূপ:

  • ব্র্যান্ডেড ছবি: এর সাইজ অবশ্যই ২০০×৮০ ডিপি হতে হবে।
  • আইকন ব্যাকগ্রাউন্ড সহ অ্যাপ আইকন: এর আকার অবশ্যই ২৪০×২৪০ ডিপি হতে হবে এবং এটি ১৬০ ডিপি ব্যাসের একটি বৃত্তের মধ্যে আঁটতে হবে।
  • আইকন ব্যাকগ্রাউন্ড ছাড়া অ্যাপ আইকন: এর আকার অবশ্যই ২৮৮×২৮৮ ডিপি হতে হবে এবং এটি ১৯২ ডিপি ব্যাসের একটি বৃত্তের মধ্যে আঁটতে হবে।

উদাহরণস্বরূপ, যদি একটি ছবির পূর্ণ আকার 300×300 dp হয়, তাহলে আইকনটিকে 200 dp ব্যাসের একটি বৃত্তের মধ্যে আঁটাতে হবে। বৃত্তের বাইরের সবকিছু অদৃশ্য (মাস্কড) হয়ে যায়।

একটি ছবি যেখানে কঠিন এবং স্বচ্ছ পটভূমির জন্য আইকনের বিভিন্ন মাত্রা দেখানো হয়েছে।
চিত্র ৩. যথাক্রমে কঠিন এবং স্বচ্ছ পটভূমির জন্য স্প্ল্যাশ স্ক্রিন আইকনের মাত্রা।

স্প্ল্যাশ স্ক্রিন অ্যানিমেশন এবং লঞ্চ সিকোয়েন্স

কোল্ড স্টার্টে কোনো অ্যাপ চালু করলে প্রায়শই অতিরিক্ত ল্যাটেন্সি দেখা যায়। আপনার স্প্ল্যাশ স্ক্রিনে একটি অ্যানিমেটেড আইকন যোগ করলে তা সুস্পষ্ট নান্দনিক আকর্ষণ তৈরি করে এবং আরও প্রিমিয়াম অভিজ্ঞতা প্রদান করে। ব্যবহারকারী গবেষণায় দেখা গেছে যে, অ্যানিমেশন দেখার সময় অ্যাপটি চালু হতে কম সময় লাগে।

চিত্র ৪-এ দেখানো অনুযায়ী, লঞ্চ সিকোয়েন্স কম্পোনেন্টগুলোর মধ্যে একটি স্প্ল্যাশ স্ক্রিন অ্যানিমেশন এমবেড করা আছে।

একটি ছবি যেখানে পরপর বারোটি ফ্রেমে লঞ্চ সিকোয়েন্সটি দেখানো হয়েছে, যা লঞ্চার আইকনটিতে ট্যাপ করার মাধ্যমে শুরু হয় এবং বড় হওয়ার সাথে সাথে স্ক্রিনটি পূর্ণ করে।
চিত্র ৪. উৎক্ষেপণ ক্রম।
  1. অ্যানিমেশন শুরু: এর মধ্যে সিস্টেম ভিউ থেকে স্প্ল্যাশ স্ক্রিন পর্যন্ত অন্তর্ভুক্ত। এটি সিস্টেম দ্বারা নিয়ন্ত্রিত এবং পরিবর্তনযোগ্য নয়।

  2. স্প্ল্যাশ স্ক্রিন (সিকোয়েন্সের "অপেক্ষা" অংশে দেখানো হয়): স্প্ল্যাশ স্ক্রিনটি কাস্টমাইজ করা যায়, যার মাধ্যমে আপনি আপনার নিজস্ব লোগো অ্যানিমেশন এবং ব্র্যান্ডিং যোগ করতে পারেন। সঠিকভাবে কাজ করার জন্য এটিকে অবশ্যই এই পৃষ্ঠায় বর্ণিত শর্তাবলী পূরণ করতে হবে।

  3. প্রস্থান অ্যানিমেশন: এর মধ্যে সেই অ্যানিমেশনটি থাকে যা স্প্ল্যাশ স্ক্রিনটি লুকিয়ে ফেলে। আপনি যদি এটি কাস্টমাইজ করতে চান, তাহলে SplashScreenView এবং এর আইকনটি ব্যবহার করুন। আপনি এগুলোর উপর ট্রান্সফর্ম, অপাসিটি এবং কালার সেটিংস সহ যেকোনো অ্যানিমেশন চালাতে পারেন। এক্ষেত্রে, অ্যানিমেশনটি শেষ হয়ে গেলে স্প্ল্যাশ স্ক্রিনটি ম্যানুয়ালি সরিয়ে ফেলুন।

আইকন অ্যানিমেশন চালানোর সময়, অ্যাপ লঞ্চ আপনাকে সিকোয়েন্সটি এড়িয়ে যাওয়ার বিকল্প দেয়, যদি অ্যাপটি আগে থেকেই প্রস্তুত থাকে। অ্যাপটি স্বয়ংক্রিয়ভাবে onResume() ট্রিগার করে অথবা স্প্ল্যাশ স্ক্রিনটি টাইম আউট হয়ে যায়, তাই নিশ্চিত করুন যে মোশনটি স্বাচ্ছন্দ্যে এড়িয়ে যাওয়া যায়। স্প্ল্যাশ স্ক্রিনটি শুধুমাত্র তখনই onResume() দিয়ে বন্ধ করতে হবে যখন অ্যাপটি দৃশ্যগতভাবে স্থিতিশীল থাকে, যাতে কোনো অতিরিক্ত স্পিনারের প্রয়োজন না হয়। একটি অসম্পূর্ণ ইন্টারফেস উপস্থাপন করা ব্যবহারকারীদের জন্য অস্বস্তিকর হতে পারে এবং এটি অপ্রত্যাশিততা বা অমার্জিততার ছাপ ফেলতে পারে।

স্প্ল্যাশ স্ক্রিন অ্যানিমেশনের প্রয়োজনীয়তা

আপনার স্প্ল্যাশ স্ক্রিনকে অবশ্যই নিম্নলিখিত শর্তাবলী মেনে চলতে হবে:

  • স্বচ্ছতা ছাড়া একটিমাত্র উইন্ডোর ব্যাকগ্রাউন্ড রঙ সেট করুন। SplashScreen কম্প্যাট লাইব্রেরির মাধ্যমে ডে এবং নাইট মোড সমর্থন করা হয়।

  • নিশ্চিত করুন যে অ্যানিমেটেড আইকনটি নিম্নলিখিত বৈশিষ্ট্যগুলো পূরণ করে:

    • ফর্ম্যাট: আইকনটি অবশ্যই একটি AnimatedVectorDrawable (AVD) XML হতে হবে।
    • মাপ: একটি AVD আইকনকে অবশ্যই একটি অ্যাডাপ্টিভ আইকনের আকারের চারগুণ হতে হবে, নিম্নরূপ:
      • আইকন এলাকাটি অবশ্যই ৪৩২ ডিপি হতে হবে—অন্য কথায়, একটি আনমাস্কড অ্যাডাপ্টিভ আইকনের ১০৮ ডিপি এলাকার চারগুণ।
      • ছবিটির ভেতরের দুই-তৃতীয়াংশ লঞ্চার আইকনে দৃশ্যমান থাকে এবং এর সাইজ অবশ্যই ২৮৮ ডিপি হতে হবে—অন্য কথায়, এটি একটি অ্যাডাপ্টিভ আইকনের ভেতরের মাস্ক করা অংশের ৭২ ডিপি-র চারগুণ।
    • সময়কাল: ফোনে আমরা ১,০০০ মিলিসেকেন্ডের বেশি না করার পরামর্শ দিই। আপনি বিলম্বিত শুরু (delayed start) ব্যবহার করতে পারেন, কিন্তু এটি ১৬৬ মিলিসেকেন্ডের বেশি হতে পারবে না। যদি অ্যাপটি চালু হতে ১,০০০ মিলিসেকেন্ডের বেশি সময় লাগে, তবে একটি লুপিং অ্যানিমেশন (looping animation) ব্যবহার করার কথা বিবেচনা করতে পারেন।
  • স্প্ল্যাশ স্ক্রিনটি বন্ধ করার জন্য একটি উপযুক্ত সময় নির্ধারণ করুন, যা আপনার অ্যাপ তার প্রথম ফ্রেমটি আঁকার সাথে সাথেই ঘটে। স্প্ল্যাশ স্ক্রিনটি দীর্ঘ সময়ের জন্য স্ক্রিনে রাখার বিষয়ে বর্ণিত বিভাগ অনুসারে আপনি এটিকে আরও কাস্টমাইজ করতে পারেন।

স্প্ল্যাশ স্ক্রিন রিসোর্স

চিত্র ৫. এভিডি-র উদাহরণ।

উদাহরণ স্টার্টার কিটটি ডাউনলোড করুন, যেখানে দেখানো হয়েছে কীভাবে একটি অ্যানিমেশন তৈরি, ফরম্যাট এবং AVD-তে এক্সপোর্ট করতে হয়। এতে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত রয়েছে:

  • অ্যানিমেশনটির অ্যাডোবি আফটার ইফেক্টস প্রজেক্ট ফাইল।
  • চূড়ান্ত রপ্তানিকৃত AVD XML ফাইল।
  • অ্যানিমেশনটির একটি উদাহরণ GIF।

এই ফাইলগুলি ডাউনলোড করার মাধ্যমে, আপনি গুগলের পরিষেবার শর্তাবলীতে সম্মত হচ্ছেন।

গুগলের গোপনীয়তা নীতিতে বর্ণনা করা হয়েছে যে এই পরিষেবাতে ডেটা কীভাবে পরিচালনা করা হয়।

আপনার অ্যাপে স্প্ল্যাশ স্ক্রিনটি কাস্টমাইজ করুন

ডিফল্টরূপে, যদি windowBackground একরঙা হয়, তাহলে SplashScreen আপনার থিমের windowBackground ব্যবহার করে। স্প্ল্যাশ স্ক্রিন কাস্টমাইজ করতে, অ্যাপ থিমে অ্যাট্রিবিউট যোগ করুন।

আপনি নিম্নলিখিত যেকোনো একটি পদ্ধতি অনুসরণ করে আপনার অ্যাপের স্প্ল্যাশ স্ক্রিনটি কাস্টমাইজ করতে পারেন:

  • এর চেহারা পরিবর্তন করতে থিমের অ্যাট্রিবিউটগুলো সেট করুন।

  • এটি দীর্ঘ সময়ের জন্য স্ক্রিনে রাখুন।

  • স্প্ল্যাশ স্ক্রিনটি বন্ধ করার অ্যানিমেশনটি কাস্টমাইজ করুন।

শুরু করুন

কোর SplashScreen লাইব্রেরিটি এপিআই ২৩ থেকে সকল ডিভাইসে অ্যান্ড্রয়েড ১২-এর স্প্ল্যাশ স্ক্রিন নিয়ে আসে। আপনার প্রজেক্টে এটি যোগ করতে, আপনার build.gradle ফাইলে নিম্নলিখিত কোডটুকু যুক্ত করুন:

গ্রুভি

dependencies {
    implementation "androidx.core:core-splashscreen:1.0.0"
}

কোটলিন

dependencies {
    implementation("androidx.core:core-splashscreen:1.0.0")
}

স্প্ল্যাশ স্ক্রিনের চেহারা পরিবর্তন করতে একটি থিম সেট করুন।

আপনার অ্যাপের স্প্ল্যাশ স্ক্রিন কাস্টমাইজ করতে আপনি আপনার Activity থিমে নিম্নলিখিত অ্যাট্রিবিউটগুলো নির্দিষ্ট করতে পারেন। যদি আপনার আগে থেকেই android:windowBackground এর মতো অ্যাট্রিবিউট ব্যবহার করে এমন কোনো পুরোনো স্প্ল্যাশ স্ক্রিন ইমপ্লিমেন্টেশন থাকে, তবে অ্যান্ড্রয়েড ১২ এবং তার পরবর্তী সংস্করণগুলোর জন্য একটি বিকল্প রিসোর্স ফাইল দেওয়ার কথা বিবেচনা করুন।

  1. ব্যাকগ্রাউন্ডকে একটি নির্দিষ্ট একক রঙ দিয়ে পূরণ করতে windowSplashScreenBackground ব্যবহার করুন:

    <item name="android:windowSplashScreenBackground">@color/...</item>
    
  2. প্রারম্ভিক উইন্ডোর মাঝখানের আইকনটি প্রতিস্থাপন করতে windowSplashScreenAnimatedIcon ব্যবহার করুন।

    শুধুমাত্র অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩২) লক্ষ্য করে তৈরি অ্যাপগুলোর জন্য নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:

    যদি অবজেক্টটি AnimationDrawable এবং AnimatedVectorDrawable এর মাধ্যমে অ্যানিমেটযোগ্য ও অঙ্কনযোগ্য হয়, তাহলে শুরুর উইন্ডোটি দেখানোর সময় অ্যানিমেশনটি চালানোর জন্য windowSplashScreenAnimationDuration সেট করুন। Android 13-এর জন্য এটির প্রয়োজন নেই, কারণ এর সময়কাল সরাসরি AnimatedVectorDrawable থেকে অনুমান করা হয়।

    <item name="android:windowSplashScreenAnimatedIcon">@drawable/...</item>
    
  3. স্প্ল্যাশ স্ক্রিন আইকন অ্যানিমেশনের সময়কাল নির্দেশ করতে windowSplashScreenAnimationDuration ব্যবহার করুন। এটি সেট করলে স্প্ল্যাশ স্ক্রিনটি ঠিক কতক্ষণ দেখানো হবে তার উপর কোনো প্রভাব পড়ে না, কিন্তু স্প্ল্যাশ স্ক্রিন এক্সিট অ্যানিমেশন কাস্টমাইজ করার সময় আপনি SplashScreenView.getIconAnimationDuration ব্যবহার করে এটি পেতে পারেন। আরও বিস্তারিত জানতে, স্প্ল্যাশ স্ক্রিনকে দীর্ঘ সময়ের জন্য স্ক্রিনে রাখার বিষয়ে পরবর্তী বিভাগটি দেখুন।

    <item name="android:windowSplashScreenAnimationDuration">1000</item>
    
  4. স্প্ল্যাশ স্ক্রিন আইকনের পিছনে একটি ব্যাকগ্রাউন্ড সেট করতে windowSplashScreenIconBackgroundColor ব্যবহার করুন। উইন্ডোর ব্যাকগ্রাউন্ড এবং আইকনের মধ্যে যথেষ্ট বৈসাদৃশ্য না থাকলে এটি কার্যকর।

    <item name="android:windowSplashScreenIconBackgroundColor">@color/...</item>
    
  5. আপনি স্প্ল্যাশ স্ক্রিনের নীচে দেখানোর জন্য একটি ছবি সেট করতে windowSplashScreenBrandingImage ব্যবহার করতে পারেন। তবে, ডিজাইন নির্দেশিকা ব্র্যান্ডিং ইমেজ ব্যবহার না করার পরামর্শ দেয়।

    <item name="android:windowSplashScreenBrandingImage">@drawable/...</item>
    
  6. অ্যান্ড্রয়েড ১৩ এবং তার পরবর্তী সংস্করণগুলিতে আপনার অ্যাপ স্প্ল্যাশ স্ক্রিনে সর্বদা আইকন প্রদর্শন করবে কিনা, তা নির্দিষ্ট করতে আপনি windowSplashScreenBehavior ব্যবহার করতে পারেন। এর ডিফল্ট মান হলো ০, যা স্প্ল্যাশ স্ক্রিনে আইকনটি প্রদর্শন করে যদি লঞ্চিং অ্যাক্টিভিটি splashScreenStyle কে SPLASH_SCREEN_STYLE_ICON এ সেট করে, অথবা যদি লঞ্চিং অ্যাক্টিভিটি কোনো স্টাইল নির্দিষ্ট না করে, তবে এটি সিস্টেমের আচরণ অনুসরণ করে। আপনি যদি কখনও একটি খালি স্প্ল্যাশ স্ক্রিন প্রদর্শন না করে সর্বদা অ্যানিমেটেড আইকনটি দেখাতে চান, তবে এটিকে icon_preferred মানে সেট করুন।

    <item name="android:windowSplashScreenBehavior">icon_preferred</item>
    

স্প্ল্যাশ স্ক্রিনটি দীর্ঘ সময়ের জন্য স্ক্রিনে রাখুন

আপনার অ্যাপ তার প্রথম ফ্রেমটি আঁকার সাথে সাথেই স্প্ল্যাশ স্ক্রিনটি অদৃশ্য হয়ে যায়। যদি আপনার অল্প পরিমাণ ডেটা লোড করার প্রয়োজন হয়, যেমন অ্যাসিঙ্ক্রোনাসভাবে লোকাল ডিস্ক থেকে অ্যাপের ভেতরের সেটিংস লোড করা, তাহলে আপনি অ্যাপটিকে তার প্রথম ফ্রেমটি আঁকার জন্য স্থগিত করতে ViewTreeObserver.OnPreDrawListener ব্যবহার করতে পারেন।

যদি আপনার প্রারম্ভিক কার্যকলাপ অঙ্কনের আগেই শেষ হয়ে যায়—উদাহরণস্বরূপ, কন্টেন্ট ভিউ সেট না করে এবং onResume আগেই শেষ হয়ে গেলে—তাহলে প্রি-ড্র লিসেনারের প্রয়োজন নেই।

কোটলিন

// Create a new event for the activity.
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // Set the layout for the content view.
    setContentView(R.layout.main_activity)

    // Set up an OnPreDrawListener to the root view.
    val content: View = findViewById(android.R.id.content)
    content.viewTreeObserver.addOnPreDrawListener(
        object : ViewTreeObserver.OnPreDrawListener {
            override fun onPreDraw(): Boolean {
                // Check whether the initial data is ready.
                return if (viewModel.isReady) {
                    // The content is ready. Start drawing.
                    content.viewTreeObserver.removeOnPreDrawListener(this)
                    true
                } else {
                    // The content isn't ready. Suspend.
                    false
                }
            }
        }
    )
}

জাভা

// Create a new event for the activity.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Set the layout for the content view.
    setContentView(R.layout.main_activity);

    // Set up an OnPreDrawListener to the root view.
    final View content = findViewById(android.R.id.content);
    content.getViewTreeObserver().addOnPreDrawListener(
            new ViewTreeObserver.OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                    // Check whether the initial data is ready.
                    if (mViewModel.isReady()) {
                        // The content is ready. Start drawing.
                        content.getViewTreeObserver().removeOnPreDrawListener(this);
                        return true;
                    } else {
                        // The content isn't ready. Suspend.
                        return false;
                    }
                }
            });
}

স্প্ল্যাশ স্ক্রিন বন্ধ করার অ্যানিমেশনটি কাস্টমাইজ করুন।

আপনি Activity.getSplashScreen() এর মাধ্যমে স্প্ল্যাশ স্ক্রিনের অ্যানিমেশন আরও কাস্টমাইজ করতে পারেন।

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // ...

    // Add a callback that's called when the splash screen is animating to the
    // app content.
    splashScreen.setOnExitAnimationListener { splashScreenView ->
        // Create your custom animation.
        val slideUp = ObjectAnimator.ofFloat(
            splashScreenView,
            View.TRANSLATION_Y,
            0f,
            -splashScreenView.height.toFloat()
        )
        slideUp.interpolator = AnticipateInterpolator()
        slideUp.duration = 200L

        // Call SplashScreenView.remove at the end of your custom animation.
        slideUp.doOnEnd { splashScreenView.remove() }

        // Run your animation.
        slideUp.start()
    }
}

জাভা

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...

    // Add a callback that's called when the splash screen is animating to the
    // app content.
    getSplashScreen().setOnExitAnimationListener(splashScreenView -> {
        final ObjectAnimator slideUp = ObjectAnimator.ofFloat(
                splashScreenView,
                View.TRANSLATION_Y,
                0f,
                -splashScreenView.getHeight()
        );
        slideUp.setInterpolator(new AnticipateInterpolator());
        slideUp.setDuration(200L);

        // Call SplashScreenView.remove at the end of your custom animation.
        slideUp.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                splashScreenView.remove();
            }
        });

        // Run your animation.
        slideUp.start();
    });
}

এই কলব্যাকটি শুরু হওয়ার সাথে সাথে স্প্ল্যাশ স্ক্রিনের অ্যানিমেটেড ভেক্টর ড্রয়েবলটি চালু হয়ে যায়। অ্যাপটি চালু থাকার সময়কালের উপর নির্ভর করে, ড্রয়েবলটি তার অ্যানিমেশনের মাঝপথে থাকতে পারে। অ্যানিমেশনটি কখন শুরু হয়েছে তা জানতে SplashScreenView.getIconAnimationStart ব্যবহার করুন। আপনি নিম্নলিখিত উপায়ে আইকন অ্যানিমেশনের অবশিষ্ট সময়কাল গণনা করতে পারেন:

কোটলিন

// Get the duration of the animated vector drawable.
val animationDuration = splashScreenView.iconAnimationDuration
// Get the start time of the animation.
val animationStart = splashScreenView.iconAnimationStart
// Calculate the remaining duration of the animation.
val remainingDuration = if (animationDuration != null && animationStart != null) {
    (animationDuration - Duration.between(animationStart, Instant.now()))
        .toMillis()
        .coerceAtLeast(0L)
} else {
    0L
}

জাভা

// Get the duration of the animated vector drawable.
Duration animationDuration = splashScreenView.getIconAnimationDuration();
// Get the start time of the animation.
Instant animationStart = splashScreenView.getIconAnimationStart();
// Calculate the remaining duration of the animation.
long remainingDuration;
if (animationDuration != null && animationStart != null) {
    remainingDuration = animationDuration.minus(
            Duration.between(animationStart, Instant.now())
    ).toMillis();
    remainingDuration = Math.max(remainingDuration, 0L);
} else {
    remainingDuration = 0L;
}

অতিরিক্ত সম্পদ