Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Menggerakkan tampilan dengan animasi

Objek di layar sering kali perlu diatur ulang posisinya. Hal ini dapat terjadi karena interaksi pengguna atau beberapa pemrosesan yang dilakukan di belakang layar. Sebagai gantinya segera perbarui posisi objek, yang akan menyebabkannya berkedip dari satu area ke area lain, Anda harus menggunakan animasi untuk memindahkannya dari posisi awal ke posisi akhirnya.

Android menyediakan cara yang memungkinkan Anda untuk mengatur ulang posisi objek tampilan di layar, seperti ObjectAnimator. Anda dapat memberikan posisi akhir yang Anda inginkan agar objek menetap, serta durasi animasi. Anda dapat menggabungkan ini dengan interpolator waktu untuk mengontrol akselerasi atau deselerasi animasi.

Mengubah posisi tampilan dengan ObjectAnimator

ObjectAnimator API menyediakan cara mudah untuk mengubah properti tampilan dengan durasi yang ditentukan. Ini berisi metode statis untuk membuat instance ObjectAnimator bergantung pada jenis atribut apa yang Anda animasikan. Saat memposisikan ulang tampilan Anda di layar, gunakan atribut translationX dan translationY.

Berikut ini adalah contoh ObjectAnimator yang memindahkan tampilan ke 100 piksel dari kiri layar dalam 2 detik:

Kotlin

    ObjectAnimator.ofFloat(view, "translationX", 100f).apply {
        duration = 2000
        start()
    }

    

Java

    ObjectAnimator animation = ObjectAnimator.ofFloat(view, "translationX", 100f);
    animation.setDuration(2000);
    animation.start();

    

Contoh ini menggunakan metode ObjectAnimator.ofFloat() karena nilai terjemahan harus mengambang. Parameter pertama adalah tampilan yang ingin Anda animasikan. Parameter kedua adalah properti yang Anda animasikan. Karena tampilan harus dipindahkan secara horizontal, properti translationX digunakan. Parameter terakhir adalah nilai akhir dari animasi. Karena nilai ini adalah 100, maka akan menjadi banyak piksel dari kiri layar.

Metode berikutnya menentukan lamanya waktu animasi yang diperlukan dalam milidetik. Dalam contoh ini, animasi akan berjalan selama 2 detik (2000 milidetik).

Metode terakhir menyebabkan animasi yang dijalankan akan memperbarui posisi tampilan di layar.

Untuk informasi selengkapnya tentang menggunakan ObjectAnimator, lihat Menganimasikan dengan ObjectAnimator.

Menambahkan gerakan melengkung

Meskipun ObjectAnimator mudah digunakan, secara default ObjectAnimator akan mengubah posisi tampilan menggunakan garis lurus antara titik awal dan titik akhir. Desain material bergantung pada kurva tidak hanya waktu animasi, tetapi juga pergerakan spasial objek di layar. Menggunakan gerakan melengkung dapat membantu aplikasi Anda menemukan lebih banyak materi sekaligus membuat animasi Anda lebih menarik.

Menggunakan PathInterpolator

Class PathInterpolator adalah interpolator baru yang diperkenalkan di Android 5.0 (API 21). Class ini didasarkan pada kurva Bézier atau objek Path. Interpolator ini menetapkan kurva gerakan dalam persegi berukuran 1x1, dengan titik-titik link di (0,0) dan (1,1), serta titik kontrol sebagaimana ditetapkan menggunakan argumen konstruktor. Salah satu cara untuk membuat PathInterpolator adalah dengan membuat objek Path dan menentukannya ke PathInterpolator:

Kotlin

    // arcTo() and PathInterpolator only available on API 21+
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        val path = Path().apply {
            arcTo(0f, 0f, 1000f, 1000f, 270f, -180f, true)
        }
        val pathInterpolator = PathInterpolator(path)
    }

    

Java

    // arcTo() and PathInterpolator only available on API 21+
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
      Path path = new Path();
      path.arcTo(0f, 0f, 1000f, 1000f, 270f, -180f, true);
      PathInterpolator pathInterpolator = new PathInterpolator(path);
    }

    

Anda juga bisa menetapkan interpolator jalur sebagai resource XML:

<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
        android:controlX1="0.4"
        android:controlY1="0"
        android:controlX2="1"
        android:controlY2="1"/>
    

Setelah membuat objek PathInterpolator, Anda dapat meneruskannya ke metode Animator.setInterpolator(). Animator akan menggunakan interpolator untuk menentukan waktu atau kurva lokasi saat dimulai.

Kotlin

    val animation = ObjectAnimator.ofFloat(view, "translationX", 100f).apply {
        interpolator = pathInterpolator
        start()
    }

    

Java

    ObjectAnimator animation = ObjectAnimator.ofFloat(view, "translationX", 100f);
    animation.setInterpolator(pathInterpolator);
    animation.start();

    

Menentukan jalur Anda sendiri

Class ObjectAnimator memiliki konstruktor baru yang memungkinkan Anda untuk menganimasikan koordinat sepanjang jalur menggunakan dua atau beberapa properti sekaligus bersama dengan jalur. Misalnya, animator berikut menggunakan objek Path untuk menganimasikan properti X dan Y sebuah tampilan:

Kotlin

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        val path = Path().apply {
            arcTo(0f, 0f, 1000f, 1000f, 270f, -180f, true)
        }
        val animator = ObjectAnimator.ofFloat(view, View.X, View.Y, path).apply {
            duration = 2000
            start()
        }
    } else {
        // Create animator without using curved path
    }

    

Java

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
      Path path = new Path();
      path.arcTo(0f, 0f, 1000f, 1000f, 270f, -180f, true);
      ObjectAnimator animator = ObjectAnimator.ofFloat(view, View.X, View.Y, path);
      animator.setDuration(2000);
      animator.start();
    } else {
      // Create animator without using curved path
    }

    

Berikut inilah tampilan animasi lengkung:

Jika Anda tidak ingin membuat kurva waktu atau jalur Anda sendiri, sistem akan menyediakan resource XML untuk tiga kurva dasar dalam spesifikasi desain material:

  • @interpolator/fast_out_linear_in.xml
  • @interpolator/fast_out_slow_in.xml
  • @interpolator/linear_out_slow_in.xml