Hedefler arasındaki geçişleri canlandırma

Gezinme bileşeni, işlemlere hem özellik eklemenizi hem de animasyonları görüntülemenizi sağlar. Kendi animasyonlarınızı oluşturmak için Animasyon kaynakları sayfasına göz atın.

Gezinme, başlamanız için çeşitli varsayılan animasyonlar da içerir. Bir işleme animasyon eklemek için aşağıdakileri yapın:

  1. Gezinme düzenleyicisinde, animasyonun gerçekleşmesi gereken işlemi tıklayın.
  2. Özellikler panelinin Animasyonlar bölümünde, eklemek istediğiniz animasyonun yanındaki açılır oku tıklayın. Aşağıdaki türler arasından seçim yapabilirsiniz:
    • Hedef girme
    • Bir hedeften çıkma
    • Pop işlemi ile hedef girme. Bu işlem, gezinme sırasında ek hedefleri arka yığından çıkarır.
    • Pop işlemini kullanarak bir hedeften çıkma
  3. Görüntülenen proje animasyonları listesinden bir animasyon seçin.
özellikler panelinin animasyonlar bölümü
Şekil 1. Özellikler panelinin Animasyonlar bölümü.

Animasyonları ekledikten sonra XML metin görünümüne geçmek için Metin sekmesini tıklayın. Animasyonların XML'i artık karşılık gelen <action> öğesinde görünür. Aşağıdaki örnekte specifyAmountFragment, confirmationAction işlemi için kaynak hedeftir:

<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>

Hedefler arasında paylaşılan öğe geçişleri ekleme

Bir görünüm iki hedef arasında paylaşıldığında, bir hedeften diğerine geçerken görünümün nasıl geçiş yapacağını tanımlamak için paylaşılan öğe geçişini kullanabilirsiniz. Paylaşılan öğe geçişleri, Geçiş Çerçevesi'nin bir parçasıdır.

Paylaşılan öğeler, gezinme XML dosyanız yerine programlı olarak sağlanır. Etkinlik ve parça hedeflerinin her biri, Navigator.Extras arayüzünün bir alt sınıfına sahiptir. Bu alt sınıf, paylaşılan öğeler dahil olmak üzere ek gezinme seçeneklerini kabul eder. navigate() yöntemini çağırırken bu Extras tutarını aktarabilirsiniz.

Paylaşılan öğe, parça hedefine geçiş yapıyor

FragmentNavigator.Extras sınıfı, FragmentTransaction.addSharedElement() kullanımına benzer şekilde, paylaşılan öğeleri bir hedeften diğerine taşımanıza olanak tanır. Daha sonra, aşağıdaki örnekte gösterildiği gibi, ekstraları navigate() öğesine iletebilirsiniz:

Kotlin

val extras = FragmentNavigatorExtras(view1 to "hero_image")

view.findNavController().navigate(
    R.id.confirmationAction,
    null, // Bundle of args
    null, // NavOptions
    extras)

Java

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);

Paylaşılan öğe bir etkinlik hedefine geçiş yapıyor

Etkinlikler, Paylaşılan Öğe Geçişlerinin kontrolü için Paylaşılan öğe ile etkinlik başlatma dokümanlarında açıklandığı ve aşağıdaki örnekte gösterildiği üzere ActivityOptionsCompat ürününe dayanır:

Kotlin

// 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)

Java

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);

Etkinlik geçişlerine pop animasyonlar uygulama

Bir Activity öğesine gittiğinizde veya bu konumdan gittiğinizde pop animasyonlar otomatik olarak uygulanmaz. Bunun yerine, animasyonun gerçekleşmesi gereken hedef Activity hedefinden ActivityNavigator.applyPopAnimationsToPendingTransition() yöntemini çağırmanız gerekir:

Kotlin

override fun finish() {
    super.finish()
    ActivityNavigator.applyPopAnimationsToPendingTransition(this)
}

Java

@Override
public void finish() {
    super.finish();
    ActivityNavigator.applyPopAnimationsToPendingTransition(this);
}