Animasyon kullanarak işlem başlatma

Materyal Tasarım uygulamalarındaki etkinlik geçişleri ortak öğeler arasındaki hareket ve dönüşümlerle farklı durumlar olabilir. Giriş ve çıkış geçişleri ve geçişler için özel animasyonlar belirtebilirsiniz. Paylaşılan öğelerin, etkinlikler arasında geçişleri.

1. Şekil. CEVAP geçişe yardımcı olabilir.

  • Enter geçişi, bir etkinlikteki görüntüleme sayısını belirler sahneye girin. Örneğin, explode giriş geçişinde, sahneye dışarıdan girer ve sahnenin merkezine doğru içe doğru tıklayın.
  • Çıkış geçişi, bir etkinlik çıkışındaki görüntülemelerin nasıl olacağını belirler sahne. Örneğin, explode çıkış geçişinde, sahneyi merkezden uzaklaştırarak çıkmasını sağlayabilirsiniz.
  • Paylaşılan öğeler geçişi, bu etkinlikler arasındaki geçişleri gözden geçireceğiz. Örneğin, iki etkinlik farklı konumlarda ve boyutlarda aynı resme sahipse changeImageTransform paylaşılan öğe geçişi çevirir ve bu etkinlikler arasında görüntüyü düzgün şekilde ölçeklendirir.

Android aşağıdaki giriş ve çıkış geçişlerini destekler:

  • explode: Görünümleri, sahnenin merkezine doğru veya merkezinden uzaklaştırır.
  • slide: görüntülemeleri resmin kenarlarının birinden içeri veya dışarı taşır sahne.
  • fade: Bir görünümü değiştirerek sahneye ekler veya sahneden görünüm kaldırır opaklık.

Visibility sınıfını genişleten tüm geçişler, giriş veya çıkış geçişi olarak desteklenir. Daha fazla bilgi için Transition. sınıfını kullanır.

Android, aşağıdaki paylaşılan öğeler geçişlerini de destekler:

  • changeBounds: hedefin düzen sınırlarındaki değişikliklere animasyon uygular görüntüleme.
  • changeClipBounds: hedefin klip sınırlarındaki değişikliklere animasyon uygular görüntüleme.
  • changeTransform: reklam öğesinin ölçek ve rotasyonundaki değişiklikleri hedef görüntüleme sayısı
  • changeImageTransform: şu boyut ve ölçekteki değişiklikleri canlandırır: ve resimleri hedefleyebilirsiniz.

Uygulamanızda etkinlik geçişlerini etkinleştirdiğinizde varsayılan çapraz geçiş giriş ve çıkış etkinlikleri arasında geçiş etkinleşir.

Şekil 2. Tek bir paylaşılan öğe içeren sahne geçişi.

Paylaşılan öğeleri kullanarak etkinlikler arasında animasyon oluşturan örnek kod için ActivitySceneTransitionBasic bölümüne gidin.

Sistem sürümünü kontrol edin

Etkinlik geçişi API'leri, Android 5.0 (API 21) ve sonraki sürümlerde kullanılabilir. Android'in önceki sürümleriyle uyumluluğu korumak için sizden önce çalışma zamanında version sistemi şu özelliklerden herhangi biri için API'leri çağırmanıza yardımcı olur:

Kotlin

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

Java

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

Özel geçişleri belirtme

İlk olarak, android:windowActivityTransitions ile pencere içeriği geçişlerini etkinleştirin özelliğini kullanabilirsiniz. Ayrıca aşağıdakileri de belirtebilirsiniz: Stil tanımınızda girme, çıkış ve paylaşılan öğe geçişleri:

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

Bu örnekteki change_image_transform geçişi aşağıdaki gibi tanımlanır:

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

changeImageTransform öğesi, ChangeImageTransform sınıf. Daha fazla bilgi için API'ye bakın Transition için referans.

Bunun yerine kodunuzda pencere içeriği geçişlerini etkinleştirmek için Window.requestFeature() işlevi:

Kotlin

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

Java

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

Kodunuzda geçişleri belirtmek için bu işlevleri bir Transition nesne:

setExitTransition() ve setSharedElementExitTransition() işlevleri çıkışı tanımlar tercih edebilirsiniz. setEnterTransition() ve setSharedElementEnterTransition() işlevleri, enter geçişini sağlar.

Geçişten tam olarak yararlanmak için pencere içeriğini etkinleştirmeniz gerekir hem aramada hem de çağrılan etkinliklerde geçiş yapılmasını sağlar. Aksi halde etkinliği, çıkış geçişini başlatır, ancak sonrasında pencereyi görürsünüz. geçişler (ör. ölçeklenme veya solma) kullanılır.

Mümkün olan en kısa sürede giriş geçişini başlatmak için Window.setAllowEnterTransitionOverlap(). işlevini çağırabilirsiniz. Bu sayede daha etkileyici giriş geçişleri elde edebilirsiniz.

Geçişleri kullanarak etkinlik başlatma

Geçişleri etkinleştirir ve bir etkinlik için çıkış geçişi ayarlarsanız Geçişiniz, aşağıdaki şekilde başka bir etkinlik başlattığınızda etkinleştirilir:

Kotlin

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

Java

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

İkinci etkinlik için bir giriş geçişi ayarlarsanız bu geçiş de etkinlik başladığında etkinleştirilir. Başlangıçta geçişleri devre dışı bırakmak için başka bir etkinlik için null seçenek paketi sağlayın.

Paylaşılan öğeyle etkinlik başlatma

Belirli bir animasyona sahip olan iki etkinlik arasında paylaşılan öğe için aşağıdakileri yapın:

  1. Temanızda pencere içeriği geçişlerini etkinleştirin.
  2. Stilinizde, paylaşılan öğeler geçişi belirtin.
  3. Geçişinizi XML kaynağı olarak tanımlayın.
  4. Her iki düzende de paylaşılan öğelere android:transitionName özelliği için de kullanılmaktadır.
  5. ActivityOptions.makeSceneTransitionAnimation() işlevini kullanın.

Kotlin

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

Java

// 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());
    }
});

Kodunuzda oluşturduğunuz paylaşılan dinamik görünümler için Her ikisinde de ortak bir öğe adı belirtmek için View.setTransitionName() işlevi yardımcı olur.

İkinci etkinliği bitirdiğinizde sahne geçiş animasyonunu tersine çevirmek için Activity.finishAfterTransition(). işlevini Activity.finish() yerine kullanabilirsiniz.

Birden fazla paylaşılan öğeyle etkinlik başlatma

Daha fazla ayrıntı içeren iki etkinlik arasında bir sahne geçişi animasyonu oluşturmak için birden fazla paylaşılan öğe içeriyorsa, paylaşılan öğeleri her iki düzende de android:transitionName özelliğini kullanın veya View.setTransitionName() her iki etkinlikte de çalışır oluştur ActivityOptions nesnesini tanımlayın:

Kotlin

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

Java

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