مؤلفه «پیمایش» به شما امکان میدهد پویانماییهای دارایی و نما را به کنشها اضافه کنید. برای ساختن پویانماییهای خودتان، منابع پویانمایی را بررسی کنید.
ناوبری همچنین شامل چندین پویانمایی پیشفرض برای شروع کار است. برای افزودن پویانمایی به کنش، کارهای زیر را انجام دهید:
- در ویرایشگر «پیمایش»، روی کنشی که پویانمایی باید در آن اتفاق بیفتد کلیک کنید.
- در بخش پویانماییها در پانل مشخصهها، روی پیکان منو کرکرهای
کنار پویانماییای که میخواهید اضافه کنید کلیک کنید. میتوانید از بین انواع زیر انتخاب کنید:
- وارد کردن مقصد
- خروج از مقصد
- وارد کردن مقصد ازطریق کنش پاپ، کنشی که هنگام پیمایش، مقصدهای اضافی را از پشته قبلیها پاپ میکند.
- خروج از مقصد ازطریق کنش بالاپر
- پویانماییای را از فهرست پویانماییهای پروژه که نشان داده میشود انتخاب کنید.
پساز افزودن پویانماییها، روی برگه نوشتار کلیک کنید تا به نمای نوشتار XML بروید. اکنون XML برای پویانماییها در عنصر <action> مربوطه ظاهر میشود. در مثال زیر، specifyAmountFragment مقصد منبع برای کنش confirmationAction است:
<fragment android:id="@+id/specifyAmountFragment" android:name="com.example.buybuddy.buybuddy.SpecifyAmountFragment" android:label="fragment_specify_amount" tools:layout="@layout/fragment_specify_amount"> <action android:id="@+id/confirmationAction" app:destination="@id/confirmationFragment" app:enterAnim="@anim/slide_in_right" app:exitAnim="@anim/slide_out_left" app:popEnterAnim="@anim/slide_in_left" app:popExitAnim="@anim/slide_out_right" /> </fragment>
افزودن گذرهای عنصر همرسانیشده بین مقصدها
وقتی نمایی بین دو مقصد همرسانی میشود، میتوانید از گذار عنصر همرسانیشده برای تعریف نحوه گذار نما هنگام پیمایش از یک مقصد به مقصد دیگر استفاده کنید. انتقالهای عنصر مشترک بخشی از «چارچوب انتقال» هستند.
عناصر همرسانیشده بهجای فایل XML پیمایش، بهصورت برنامهنویسیشده ارائه میشوند. مقصد فعالیت و قطعه هرکدام یک زیرکلاس از میانای Navigator.Extras دارند که گزینههای بیشتری را برای پیمایش میپذیرد، ازجمله عناصر مشترک. میتوانید این Extras را هنگام تماس با
navigate() ارائه دهید.
انتقال عنصر مشترک به مقصد قطعه
کلاس FragmentNavigator.Extras به شما امکان میدهد عناصر مشترک را از یک مقصد به مقصد بعدی براساس نام انتقال آنها نگاشت کنید، مشابه استفاده از FragmentTransaction.addSharedElement().
سپس میتوانید موارد اضافی را به navigate() منتقل کنید، همانطور که در مثال زیر نشان داده شده است:
کاتلین
val extras = FragmentNavigatorExtras(view1 to "hero_image") view.findNavController().navigate( R.id.confirmationAction, null, // Bundle of args null, // NavOptions extras)
جاوا
FragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder() .addSharedElement(view1, "hero_image") .build(); Navigation.findNavController(view).navigate( R.id.details, null, // Bundle of args null, // NavOptions extras);
انتقالهای عنصر مشترک به مقصد فعالیت
فعالیتها برای کنترل «انتقالهای عنصر همرسانیشده» به ActivityOptionsCompat متکی هستند، همانطور که در سند شروع فعالیت با عنصر همرسانیشده بهتفصیل شرح داده شده است و در مثال زیر نشان داده شده است:
کاتلین
// Rename the Pair class from the Android framework to avoid a name clash import android.util.Pair as UtilPair ... val options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, UtilPair.create(view1, "hero_image")) val extras = ActivityNavigatorExtras(options) view.findNavController().navigate( R.id.details, null, // Bundle of args null, // NavOptions extras)
جاوا
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view1, "hero_image")); ActivityNavigatorExtras extras = new ActivityNavigatorExtras.Builder() .setActivityOptions(options) .build(); Navigation.findNavController(view).navigate( R.id.details, null, // Bundle of args null, // NavOptions extras);
اعمال کردن پویانماییهای پاپ برای گذارهای فعالیت
وقتی به Activity پیمایش میکنید یا از آن خارج میشوید، پویانماییهای پاپ بهطور خودکار اعمال نمیشوند. درعوض، باید
ActivityNavigator.applyPopAnimationsToPendingTransition()
را از مقصد Activity هدف که پویانمایی باید در آنجا رخ دهد فراخوانی کنید:
کاتلین
override fun finish() { super.finish() ActivityNavigator.applyPopAnimationsToPendingTransition(this) }
جاوا
@Override public void finish() { super.finish(); ActivityNavigator.applyPopAnimationsToPendingTransition(this); }