MotionLayout: Cara Mudah Kelola Motion dan Animasi Aplikasi

Ingin aplikasimu luwes  saat dijalankan? Tulisan ini akan sangat membantumu!

Hallo kawan-kawan,  gimana nih kabarnya? Semoga kita tetap diberi kesehatan dan tetap produktif! Saya mau curhat dikit boleh ya. Jadi, setelah tulisan Flutter Hummingbird selesai, saya baru menyadari sesuatu ketika coba jalankan kembali proyeknya. Ouch! Saya merasa proyek tersebut terlalu kaku saat jendela tampilan berubah-ubah ukuran.

Dari situ saya coba membuka kembali proyek-proyek aplikasi Android yang sebelumnya sudah pernah saya buat. Dan benar saja, saya makin menyadari akan kekurangan tersebut. Untuk itu, saya melakukan eksplorasi lagi. Lantas saya cari solusi agar aplikasi berjalan luwes saat digunakan. Dan seperti biasa, hasil eksplorasi tsb saya bagi kembali padamu lewat tulisan ini. 

Dalam proses eksplorasi saya mendapat banyak pengetahuan tentang bagaimana sebuah aplikasi bisa terlihat tidak kaku saat digunakan. Salah satunya dengan menerapkan animasi di setiap view-nya dengan memanfaatkan ValueObjectAnimator dan komponen animasi lain, misalnya. 

Tapi, saya dibuat tertarik lagi dengan salah satu ViewGroup turunan dari ConstraintLayout yaitu MotionLayout. Kok tertarik lagi? Ya, karena sebelumnya saya sudah pernah mencobanya. Namun karena saat itu MotionLayout masih versi alpha yang memiliki  kekurangan. Plus dukungan untuk Android Studio pun belum selengkap sekarang. Jadinya saya menunda melakukan eksplorasi lebih lanjut waktu itu.

Mungkin teman-teman penasaran seperti apa perbedaan saat menggunakan dan tidak menggunakan MotionLayout? Silakan bandingkan berikut ini.

Dicoding MotionLayout preview

Apa itu MotionLayout?

Sebenarnya apa sih MotionLayout? MotionLayout adalah jenis tata letak yang dapat kita gunakan untuk mengelola motion dan animasi pada widget yang berada di dalam aplikasi. Seperti yang sudah disebutkan sebelumnya, karena MotionLayout merupakan turunan dari kelas ConstraintLayout, maka teman-teman akan mudah menerapkannya jika sebelumnya sudah familiar menyusun tampilan aplikasi menggunakan ConstraintLayout

Buat kamu yang belum familiar dengan ConstraintLayout, silakan baca tulisan saya sebelumnya ya. 

Hal menarik lainnya adalah bahwa MotionLayout ini mendukung kompatibilitas dari API 14. Alhasil kita bisa menerapkan animasi yang sama pada versi Android pre-lollipop. Tidak sabar mencobanya?

Eits sebentar. Sebelum mencobanya, terdapat beberapa hal yang perlu kita ketahui terlebih dahulu nih. Yaitu:

  • MotionScene
    Dalam menggunakan MotionLayout, kita membutuhkan sebuah berkas motion scene yang akan digunakan untuk menyimpan transisi, motion start, dan motion end dari sebuah View.
  • ConstraintSet
    Dalam menentukan motion start dan motion end, kita akan menggunakan elemen ConstraintSet yang didalamnya terdapat beberapa atribut yang dapat kita gunakan untuk menambahkan interpolasi saat transisi berlangsung.
  • CustomAttribute
    Elemen ini akan kita gunakan untuk menentukan transisi pada atribut yang tidak terkait dengan atribut posisi atau atribut dari sebuah View. Beberapa atribut serta nilai yang didukung bisa dibaca secara lengkap di sini.
  • Keyframe
    Ini yang menarik dalam penggunaan MotionLayout untuk menerapkan transisi. Kita bisa melakukan perubahan di point tertentu saat transisi berlangsung dengan memanfaatkan keyframe.

Dukungan penuh Android Studio

Sebelum kita mencoba membuat proyek untuk menerapkan MotionLayout, saya ingin memperlihatkan terlebih dahulu salah satu dukungan penuh Android Studio untuk penerapan MotionLayout. Apa itu?

Dicoding Motion Editor

Motion Editor

Yup, Motion Editor! Motion Editor adalah antarmuka yang disediakan Android Studio untuk kita saat ingin menerapkan MotionLayout agar mudah dalam menentukan transisi dan melihat seperti apa nantinya motion yang sudah kita buat seperti yang dicontohkan di atas. Menarik kan?

Penerapan MotionLayout

Okey, setelah berkenalan MotionLayout, langsung saja buat proyek baru pada Android Studio untuk mencobanya. Jika proyek sudah selesai dibuat, buka berkas build.gradle dan ubah versi dari constraintlayout menjadi seperti berikut:

Setelah diubah, lakukan sync now  dan tunggu hingga proses sinkronisasi selesai.

Lanjut, buka berkas activity_main.xml dan ubah root parent-nya menjadi MotionLayout seperti berikut:

Setelah itu, lengkapi kode di dalamnya seperti di bawah ini:

Di kode yang sudah teman-teman tambahkan di atas terdapat Widget yang mungkin belum pernah dilihat sebelumnya, yaitu ImageFilterView. ImageFilterView adalah sebuah Widget turunan dari ImageView di mana kita bisa melakukan transformasi seperti menetapkan rounded dan filtering dengan cara yang sederhana. Untuk beberapa asset drawable yang digunakan, silakan teman-teman unduh di sini.

Eh tapi kok masih ada eror di attribut app:layoutDescription=”…” pada root parent? Tenang. Tidak perlu khawatir, tinggal Alt + Enter untuk membuat berkas yang dibutuhkan dan masalah selesai. Contohnya seperti berikut:

Dicoding Create motion scene

Create motion scene

Mengatur Motion Scene

Nah, berkas yang dibuat barusan adalah berkas motion scene yang akan kita gunakan untuk menetapkan transisi pada View. Okey, langsung saja buka berkas tersebut kemudian ubah dan tambahkan konfigurasi transition dan constraint set seperti berikut:

Sebelum lanjut, pastikan kembali perubahan kode di atas sudah sesuai dengan kode yang teman-teman tambahkan yaa. Jika sudah sesuai, fokus pada ConstraintSet dengan id layoutCollapse kemudian tambahkan kode berikut:

Selanjutnya untuk ConstraintSet dengan id layoutExpanded, lengkapi kodenya menjadi seperti berikut:

Setelah selesai, selanjutnya kita akan menentukan interaksi seperti apa jika motion ingin dijalankan.Masih pada berkas yang sama, fokus pada elemen Transition dan lengkapi kodenya menjadi seperti berikut:

Selesai! Untuk interaksinya kita buat saat button yang sudah kita tambahkan di awal diklik. Sampai saat ini kita sudah bisa mencobanya. Tapi, untuk memastikan apakah motion yang sudah ditambahkan dapat berjalan dengan baik sesuai dengan yang sudah kita buat, kita bisa melakukan preview pada Motion Editor. Caranya, buka berkas activity_main.xml dan masuk pada tab Design. Pada Android Studio akan tampil preview layout yang sudah kita buat. Untuk menjalankan previewnya teman-teman bisa mengikuti cara berikut:

Dicoding Motion Editor

Motion Editor

Jika sudah sesuai, teman-teman bisa langsung menjalankannya pada emulator atau device yang digunakan. Kurang lebih akan seperti berikut saat dijalankan:

Dicoding Preview Aplikasi Motion Layout

Preview Aplikasi Motion Layout

 

Bagaimana? Sangat menarik bukan. Dengan sekadar MotionLayout, kita dapat membuat aplikasi dengan interaksi yang menarik. Ya, tentunya ini dapat meningkatkan pengalaman pengguna saat berada di dalam aplikasi yang sudah kita buat.

Ohiya, saya lagi coba buat halaman onboarding aplikasi hanya dengan memanfaatkan MotionLayout, penasaran seperti apa? Pantau terus sosial media saya (promosi terselubung xD). Untuk design yang sudah saya kerjakan di Figma kurang lebih seperti berikut:

Dicoding Figma

halaman Onboarding Figma

Okey, mungkin segitu dulu tulisan tentang MotionLayout saya kali ini. Ada yang kurang jelas atau ingin ditanyakan? Yuk tulis komentar di kolom yang sudah tersedia di bawah ya.

Belajar mengembangkan aplikasi atau game dengan kurikulum yang telah divalidasi langsung oleh industri dengan Dicoding Academy.

Belajar di Dicoding Sekarang →
Share this:

Code Reviewer at Dicoding Indonesia (Google Associate Android Developer)