একটি অ্যানিমেশন ব্যবহার করে একটি কার্যকলাপ শুরু করুন

কম্পোজ পদ্ধতিটি চেষ্টা করুন
অ্যান্ড্রয়েডের জন্য Jetpack Compose হলো প্রস্তাবিত UI টুলকিট। Compose-এ কীভাবে অ্যানিমেশন নিয়ে কাজ করতে হয় তা শিখুন।

ম্যাটেরিয়াল ডিজাইন অ্যাপে অ্যাক্টিভিটি ট্রানজিশনগুলো সাধারণ উপাদানগুলোর মধ্যে গতি ও রূপান্তরের মাধ্যমে বিভিন্ন অবস্থার মধ্যে দৃশ্যমান সংযোগ স্থাপন করে। আপনি প্রবেশ ও প্রস্থান ট্রানজিশনের জন্য এবং অ্যাক্টিভিটিগুলোর মধ্যে শেয়ার করা উপাদানগুলোর ট্রানজিশনের জন্য কাস্টম অ্যানিমেশন নির্দিষ্ট করে দিতে পারেন।

চিত্র ১। অভিন্ন উপাদানসহ একটি রূপান্তর।

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

অ্যান্ড্রয়েড এই প্রবেশ এবং প্রস্থান ট্রানজিশনগুলো সমর্থন করে:

  • explode : ভিউকে দৃশ্যের কেন্দ্রের দিকে বা কেন্দ্র থেকে বাইরের দিকে সরায়।
  • slide : দৃশ্যের যেকোনো এক প্রান্ত থেকে ভিউকে ভেতরে বা বাইরে সরায়।
  • fade : কোনো ভিউয়ের অস্বচ্ছতা পরিবর্তনের মাধ্যমে সেটিকে দৃশ্য থেকে যুক্ত বা অপসারণ করে।

যে কোনো ট্রানজিশন যা Visibility ক্লাসকে এক্সটেন্ড করে, তা এন্টার বা এক্সিট ট্রানজিশন হিসেবে সমর্থিত। আরও তথ্যের জন্য, Transition ক্লাসের API রেফারেন্স দেখুন।

অ্যান্ড্রয়েড এই শেয়ার্ড এলিমেন্ট ট্রানজিশনগুলোও সমর্থন করে:

  • changeBounds : টার্গেট ভিউগুলির লেআউট বাউন্ডের পরিবর্তনগুলিকে অ্যানিমেট করে।
  • changeClipBounds : টার্গেট ভিউগুলির ক্লিপ বাউন্ডের পরিবর্তনগুলিকে অ্যানিমেট করে।
  • changeTransform : টার্গেট ভিউগুলির স্কেল এবং ঘূর্ণনের পরিবর্তনগুলিকে অ্যানিমেট করে।
  • changeImageTransform : টার্গেট ইমেজগুলোর আকার ও স্কেলের পরিবর্তনকে অ্যানিমেট করে।

যখন আপনি আপনার অ্যাপে অ্যাক্টিভিটি ট্রানজিশন চালু করেন, তখন অ্যাক্টিভিটিতে প্রবেশ এবং অ্যাক্টিভিটি থেকে প্রস্থানের মাঝে ডিফল্ট ক্রস-ফেডিং ট্রানজিশনটি সক্রিয় হয়।

চিত্র ২. একটি অভিন্ন উপাদানসহ দৃশ্য পরিবর্তন।

শেয়ার্ড এলিমেন্ট ব্যবহার করে অ্যাক্টিভিটিগুলোর মধ্যে অ্যানিমেশন করার নমুনা কোডের জন্য, ActivitySceneTransitionBasic দেখুন।

সিস্টেম সংস্করণ পরীক্ষা করুন

অ্যাক্টিভিটি ট্রানজিশন এপিআইগুলো অ্যান্ড্রয়েড ৫.০ (এপিআই ২১) এবং তার পরবর্তী সংস্করণগুলোতে উপলব্ধ। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলোর সাথে সামঞ্জস্যতা বজায় রাখতে, এই ফিচারগুলোর যেকোনোটির জন্য এপিআই কল করার আগে রানটাইমে সিস্টেম version যাচাই করে নিন:

কোটলিন

// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // Apply activity transition
} else {
    // Swap without transition
}

জাভা

// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // Apply activity transition
} else {
    // Swap without transition
}

কাস্টম ট্রানজিশন নির্দিষ্ট করুন

প্রথমত, ম্যাটেরিয়াল থিম থেকে উত্তরাধিকারসূত্রে প্রাপ্ত কোনো স্টাইল সংজ্ঞায়িত করার সময় android:windowActivityTransitions অ্যাট্রিবিউট ব্যবহার করে উইন্ডো কন্টেন্ট ট্রানজিশন সক্রিয় করুন। এছাড়াও আপনি আপনার স্টাইল ডেফিনিশনে এন্টার, এক্সিট এবং শেয়ার্ড এলিমেন্ট ট্রানজিশন নির্দিষ্ট করতে পারেন:

<style name="BaseAppTheme" parent="android:Theme.Material">
  <!-- enable window content transitions -->
  <item name="android:windowActivityTransitions">true</item>

  <!-- specify enter and exit transitions -->
  <item name="android:windowEnterTransition">@transition/explode</item>
  <item name="android:windowExitTransition">@transition/explode</item>

  <!-- specify shared element transitions -->
  <item name="android:windowSharedElementEnterTransition">
    @transition/change_image_transform</item>
  <item name="android:windowSharedElementExitTransition">
    @transition/change_image_transform</item>
</style>

এই উদাহরণে change_image_transform ট্রানজিশনটি নিম্নরূপভাবে সংজ্ঞায়িত করা হয়েছে:

<!-- res/transition/change_image_transform.xml -->
<!-- (see also Shared Transitions below) -->
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
  <changeImageTransform/>
</transitionSet>

changeImageTransform এলিমেন্টটি ChangeImageTransform ক্লাসের সাথে সম্পর্কিত। আরও তথ্যের জন্য, Transition এর API রেফারেন্স দেখুন।

এর পরিবর্তে আপনার কোডে উইন্ডো কন্টেন্ট ট্রানজিশন চালু করতে, Window.requestFeature() ফাংশনটি কল করুন:

কোটলিন

// Inside your activity (if you did not enable transitions in your theme)
with(window) {
    requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)

    // Set an exit transition
    exitTransition = Explode()
}

জাভা

// Inside your activity (if you did not enable transitions in your theme)
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);

// Set an exit transition
getWindow().setExitTransition(new Explode());

আপনার কোডে ট্রানজিশন নির্দিষ্ট করতে, একটি Transition অবজেক্ট সহ এই ফাংশনগুলো কল করুন:

setExitTransition() এবং setSharedElementExitTransition() ফাংশনগুলো কলিং অ্যাক্টিভিটির জন্য এক্সিট ট্রানজিশন নির্ধারণ করে। setEnterTransition() এবং setSharedElementEnterTransition() ফাংশনগুলো কলড অ্যাক্টিভিটির জন্য এন্টার ট্রানজিশন নির্ধারণ করে।

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

যত দ্রুত সম্ভব এন্টার ট্রানজিশন শুরু করতে, কল করা অ্যাক্টিভিটিতে Window.setAllowEnterTransitionOverlap() ফাংশনটি ব্যবহার করুন। এর ফলে আপনি আরও আকর্ষণীয় এন্টার ট্রানজিশন করতে পারবেন।

ট্রানজিশন ব্যবহার করে একটি অ্যাক্টিভিটি শুরু করুন

যদি আপনি ট্রানজিশন সক্ষম করেন এবং কোনো অ্যাক্টিভিটির জন্য একটি এক্সিট ট্রানজিশন সেট করেন, তাহলে অন্য একটি অ্যাক্টিভিটি চালু করলে ট্রানজিশনটি নিম্নরূপভাবে সক্রিয় হয়:

কোটলিন

startActivity(intent,
              ActivityOptions.makeSceneTransitionAnimation(this).toBundle())

জাভা

startActivity(intent,
              ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

আপনি যদি দ্বিতীয় অ্যাক্টিভিটির জন্য একটি এন্টার ট্রানজিশন সেট করেন, তাহলে অ্যাক্টিভিটিটি শুরু হওয়ার সাথে সাথে সেই ট্রানজিশনটিও সক্রিয় হয়ে যায়। অন্য কোনো অ্যাক্টিভিটি শুরু করার সময় ট্রানজিশন নিষ্ক্রিয় করতে, একটি null অপশনস বান্ডেল প্রদান করুন।

একটি সাধারণ উপাদান দিয়ে একটি কার্যকলাপ শুরু করুন

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

  1. আপনার থিমে উইন্ডো কন্টেন্ট ট্রানজিশন সক্রিয় করুন।
  2. আপনার স্টাইলে একটি শেয়ার্ড এলিমেন্টস ট্রানজিশন নির্দিষ্ট করুন।
  3. আপনার ট্রানজিশনকে একটি XML রিসোর্স হিসেবে সংজ্ঞায়িত করুন।
  4. android:transitionName অ্যাট্রিবিউট ব্যবহার করে উভয় লেআউটের শেয়ার করা এলিমেন্টগুলোকে একটি সাধারণ নাম দিন।
  5. ActivityOptions.makeSceneTransitionAnimation() ফাংশনটি ব্যবহার করুন।

কোটলিন

// Get the element that receives the click event
val imgContainerView = findViewById<View>(R.id.img_container)

// Get the common element for the transition in this activity
val androidRobotView = findViewById<View>(R.id.image_small)

// Define a click listener
imgContainerView.setOnClickListener( {
    val intent = Intent(this, Activity2::class.java)
    // Create the transition animation - the images in the layouts
    // of both activities are defined with android:transitionName="robot"
    val options = ActivityOptions
            .makeSceneTransitionAnimation(this, androidRobotView, "robot")
    // Start the new activity
    startActivity(intent, options.toBundle())
})

জাভা

// Get the element that receives the click event
final View imgContainerView = findViewById(R.id.img_container);

// Get the common element for the transition in this activity
final View androidRobotView = findViewById(R.id.image_small);

// Define a click listener
imgContainerView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this, Activity2.class);
        // Create the transition animation - the images in the layouts
        // of both activities are defined with android:transitionName="robot"
        ActivityOptions options = ActivityOptions
            .makeSceneTransitionAnimation(this, androidRobotView, "robot");
        // Start the new activity
        startActivity(intent, options.toBundle());
    }
});

আপনার কোডে তৈরি করা শেয়ার্ড ডাইনামিক ভিউগুলোর ক্ষেত্রে, উভয় অ্যাক্টিভিটিতে একটি সাধারণ এলিমেন্ট নাম নির্দিষ্ট করতে View.setTransitionName() ফাংশনটি ব্যবহার করুন।

দ্বিতীয় অ্যাক্টিভিটি শেষ করার পর সিন ট্রানজিশন অ্যানিমেশনটি বিপরীত করতে, Activity.finish Activity.finish() Activity.finishAfterTransition() ফাংশনটি কল করুন।

একাধিক সাধারণ উপাদান সহ একটি কার্যকলাপ শুরু করুন

দুটি অ্যাক্টিভিটির মধ্যে সিন ট্রানজিশন অ্যানিমেশন তৈরি করতে, যেখানে একাধিক শেয়ার্ড এলিমেন্ট রয়েছে, উভয় লেআউটে android:transitionName অ্যাট্রিবিউট ব্যবহার করে শেয়ার্ড এলিমেন্টগুলো সংজ্ঞায়িত করুন—অথবা উভয় অ্যাক্টিভিটিতে View.setTransitionName() ফাংশনটি ব্যবহার করুন—এবং নিম্নরূপে একটি ActivityOptions অবজেক্ট তৈরি করুন:

কোটলিন

// Rename the Pair class from the Android framework to avoid a name clash
import android.util.Pair as UtilPair
...
val options = ActivityOptions.makeSceneTransitionAnimation(this,
        UtilPair.create(view1, "agreedName1"),
        UtilPair.create(view2, "agreedName2"))

জাভা

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
        Pair.create(view1, "agreedName1"),
        Pair.create(view2, "agreedName2"));