Memulai aktivitas menggunakan animasi

Transisi aktivitas di aplikasi Desain Material memberikan koneksi visual antara keadaan yang berbeda melalui gerakan dan transformasi antar elemen umum. Anda bisa menentukan animasi {i>custom<i} untuk transisi masuk dan keluar dan untuk transisi elemen bersama antar aktivitas.

Gambar 1. J transisi dengan elemen bersama.

  • Transisi masuk menentukan cara tampilan dalam aktivitas memasuki adegan. Misalnya, dalam transisi masuk explode, tampilan memasuki adegan dari luar dan terbang ke dalam ke tengah layar.
  • Transisi keluar menentukan cara tampilan di aktivitas keluar situasi. Misalnya, dalam transisi keluar explode, tampilan keluar dari adegan menjauh dari tengah.
  • Transisi elemen bersama menentukan cara tampilan digunakan bersama di antara dua transisi aktivitas di antara aktivitas tersebut. Misalnya, jika dua aktivitas memiliki gambar yang sama dalam posisi dan ukuran yang berbeda, Transisi elemen bersama changeImageTransform menerjemahkan dan menskalakan gambar dengan lancar di antara aktivitas ini.

Android mendukung transisi masuk dan keluar ini:

  • explode: memindahkan tampilan ke arah dalam atau ke luar dari tengah adegan.
  • slide: memindahkan tampilan ke dalam atau ke luar dari salah satu tepi latar depan.
  • fade: menambahkan atau menghapus tampilan dari scene dengan mengubah opasitas.

Transisi apa pun yang memperluas class Visibility didukung sebagai transisi masuk atau keluar. Untuk informasi selengkapnya, lihat referensi API untuk Transition .

Android juga mendukung transisi elemen bersama berikut:

  • changeBounds: menganimasikan perubahan pada batas tata letak target penayangan.
  • changeClipBounds: menganimasikan perubahan pada batas klip target penayangan.
  • changeTransform: menganimasikan perubahan skala dan rotasi target penayangan.
  • changeImageTransform: menganimasikan perubahan ukuran dan skala gambar target.

Saat Anda mengaktifkan transisi aktivitas di aplikasi, cross-fading default akan mengaktifkan transisi antara aktivitas masuk dan keluar.

Gambar 2. Transisi scene dengan satu elemen bersama.

Untuk kode contoh yang membuat animasi antar-aktivitas menggunakan elemen bersama, lihat ActivitySceneTransitionBasic.

Memeriksa versi sistem

Activity transition API tersedia di Android 5.0 (API 21) dan yang lebih baru. Untuk mempertahankan kompatibilitas dengan versi Android sebelumnya, periksa sistem version saat runtime sebelum Anda memanggil API untuk salah satu fitur berikut:

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
}

Menetapkan transisi custom

Pertama, aktifkan transisi konten jendela dengan android:windowActivityTransitions saat Anda menentukan gaya yang mewarisi tema Material. Anda juga dapat menentukan transisi masuk, keluar, dan elemen bersama dalam definisi gaya Anda:

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

Transisi change_image_transform dalam contoh ini didefinisikan sebagai berikut:

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

Elemen changeImageTransform sesuai dengan Class ChangeImageTransform. Untuk informasi selengkapnya, lihat API referensi untuk Transition.

Untuk mengaktifkan transisi konten jendela dalam kode Anda, panggil metode Fungsi Window.requestFeature():

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

Untuk menentukan transisi dalam kode Anda, panggil fungsi ini dengan Objek Transition:

setExitTransition() dan Fungsi setSharedElementExitTransition() menentukan jalan keluar untuk aktivitas pemanggil. setEnterTransition() dan Fungsi setSharedElementEnterTransition() menentukan untuk aktivitas yang dipanggil.

Untuk mendapatkan efek penuh transisi, Anda harus mengaktifkan konten jendela transisi pada aktivitas panggilan dan aktivitas yang dipanggil. Jika tidak, panggilan akan memulai transisi keluar, namun kemudian Anda melihat jendela transisi—seperti mengecil atau memudar.

Untuk memulai transisi masuk sesegera mungkin, gunakan Window.setAllowEnterTransitionOverlap() fungsi pada aktivitas yang dipanggil. Ini memungkinkan Anda mendapatkan transisi masuk yang lebih dramatis.

Memulai aktivitas dengan menggunakan transisi

Jika Anda mengaktifkan transisi dan mengatur transisi keluar untuk suatu aktivitas, akan diaktifkan saat Anda meluncurkan aktivitas lain, sebagai berikut:

Kotlin

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

Java

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

Jika Anda mengatur transisi masuk untuk aktivitas kedua, transisi tersebut juga diaktifkan saat aktivitas dimulai. Untuk menonaktifkan transisi ketika Anda memulai aktivitas lain, menyediakan paket opsi null.

Memulai aktivitas dengan satu elemen bersama

Untuk membuat animasi transisi layar antara dua aktivitas yang memiliki bersama, lakukan hal berikut:

  1. Aktifkan transisi konten jendela dalam tema Anda.
  2. Tetapkan transisi elemen bersama dalam gaya Anda.
  3. Tentukan transisi Anda sebagai resource XML.
  4. Tetapkan nama umum untuk elemen bersama di kedua tata letak dengan Atribut android:transitionName.
  5. Gunakan fungsi ActivityOptions.makeSceneTransitionAnimation().

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

Untuk tampilan dinamis bersama yang Anda buat dalam kode, gunakan Fungsi View.setTransitionName() untuk menentukan nama elemen yang umum di kedua aktivitas Anda.

Untuk membalik animasi transisi adegan saat Anda menyelesaikan aktivitas kedua, panggil metode Activity.finishAfterTransition() alih-alih Activity.finish().

Memulai aktivitas dengan beberapa elemen bersama

Untuk membuat animasi transisi adegan antara dua aktivitas yang memiliki lebih banyak dari satu elemen bersama, tentukan elemen bersama dalam kedua tata letak dengan Atribut android:transitionName—atau gunakan fungsi View.setTransitionName() di kedua aktivitas—dan buat ActivityOptions sebagai berikut:

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