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

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

চিত্র 1 । ভাগ করা উপাদানগুলির সাথে একটি রূপান্তর৷

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

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

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

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

অ্যান্ড্রয়েড এই ভাগ করা উপাদানগুলির রূপান্তরকেও সমর্থন করে:

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

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

চিত্র 2. একটি ভাগ করা উপাদান সহ একটি দৃশ্যের রূপান্তর৷

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

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

অ্যাক্টিভিটি ট্রানজিশন API গুলি Android 5.0 (API 21) এবং তার উপরে উপলব্ধ। অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলির সাথে সামঞ্জস্যতা রক্ষা করতে, আপনি এই বৈশিষ্ট্যগুলির যেকোনটির জন্য API গুলি চালু করার আগে রানটাইমে সিস্টেম 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"));