Elevation — dasar-dasar, bayangan dan koordinat Z di Android

Penulis: IT Sectr Diterbitkan: 2026-02-28 Waktu membaca: 9 mnt

Elevation — konsep dasar Material Design yang menentukan tinggi elemen di sepanjang sumbu Z (tegak lurus terhadap layar). Elevation diukur dalam dp dan secara langsung memengaruhi ukuran dan keburaman bayangan yang dihasilkan elemen. Semakin tinggi elevation, semakin dekat elemen ke pengguna dan semakin terlihat bobot visualnya. Menurut Material Design 3 (Google, 2026), elevation standar untuk kartu adalah 1 dp, untuk FloatingActionButton — 6 dp, untuk dialog — 24 dp. Detail lebih lanjut tentang implementasi bayangan baca di artikel tentang bayangan di UI.

Poin utama

  • Elevation — tinggi elemen relatif terhadap permukaan layar, diukur dalam dp (Android).
  • Di Android, elevation dikelola melalui properti View dengan nama yang sama atau melalui translationZ untuk animasi.
  • OutlineProvider menentukan bentuk elemen yang digunakan untuk menggambar bayangan dari elevation.
  • Material Design 3 menggunakan 5 level dasar elevation: 0, 1, 3, 6, 8, 12 dan 24 dp.
  • Di iOS tidak ada analog langsung elevation — tinggi disimulasikan melalui CALayer.shadow dengan parameter.

Apa itu elevation?

Elevation — adalah metrik yang diperkenalkan di Material Design (Google I/O 2014) yang menggambarkan posisi elemen di sepanjang sumbu Z. Tidak seperti X dan Y (bidang dua dimensi layar), Z adalah ketinggian di atas bidang. Elevation dinyatakan dalam dp (density-independent pixels) dan menentukan dua efek visual: bayangan (shadow) yang menjadi lebih besar dan lebih buram seiring bertambahnya elevation, dan urutan gambar (elemen dengan elevation lebih tinggi digambar di atas elemen dengan elevation lebih rendah).

Metafora fisik: bayangkan lembaran kertas di atas meja. Semakin tinggi tumpukan, semakin panjang bayangan dari lembaran atas. Elevation di Material Design bekerja persis sama: setiap elemen adalah „lembaran digital" pada ketinggian tertentu. Ketika pengguna berinteraksi dengan elemen (menekan tombol, mengangkat kartu), elevation meningkat sementara — ini disebut „elevasi interaksi" (interaction elevation).

Menurut Material Design Guidelines (Google, 2026), penggunaan elevation yang benar meningkatkan kemampuan scan antarmuka sebesar 35%: pengguna lebih cepat menemukan elemen interaktif karena mereka „menonjol" di atas konten datar. Namun, jumlah level elevation yang berlebihan (lebih dari 4) mengurangi efek ini: jika semua elemen melayang, tidak ada yang terlihat penting.

Elevation di Android: properti dan API

Di Android elevation diimplementasikan sebagai properti bawaan View sejak API 21 (Android 5.0 Lollipop). View.elevation mengatur ketinggian dasar dalam piksel (px), dan View.translationZ — pergeseran tambahan untuk animasi (misalnya saat ditekan). Tinggi visual total = elevation + translationZ. Kedua properti mendukung animasi melalui ViewPropertyAnimator atau ObjectAnimator.

xml
<!-- XML: elevation dan translationZ -->
<Button
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:elevation="4dp"
    android:translationZ="2dp"
    android:stateListAnimator="@anim/button_elevation"
    android:text="Tombol dengan elevasi" />

StateListAnimator — sumber daya XML untuk menganimasi elevation dan translationZ tergantung pada status View (pressed, focused, enabled). Misalnya, saat tombol ditekan, elevation dapat meningkat dari 2 dp menjadi 8 dp, menciptakan efek terangkat. StateListAnimator mendukung animasi melalui ObjectAnimator untuk properti View apa pun.

kotlin
// Kotlin: konfigurasi elevation secara terprogram
import android.animation.ObjectAnimator
import android.view.View

val myButton: View = findViewById(R.id.myButton)
myButton.elevation = 4f  // tinggi dasar dalam px

// Animasi elevation saat ditekan
val animator = ObjectAnimator.ofFloat(
    myButton,
    "translationZ",
    0f,
    8f
).apply {
    duration = 150
    repeatMode = ValueAnimator.REVERSE
    repeatCount = 1
}

OutlineProvider — komponen kunci untuk menggambar bayangan dari elevation dengan benar. Secara default Android menggunakan ViewOutlineProvider.BACKGROUND, yang membuat kontur berdasarkan drawable latar belakang. Untuk View dengan sudut membulat (melalui shape drawable) perlu mengatur OutlineProvider kustom, jika tidak bayangan akan berbentuk persegi panjang. Komponen Material (CardView, MaterialButton) mengelola OutlineProvider secara otomatis.

Level elevation di Material Design 3

Material Design 3 (Material You) merevisi sistem elevation dibandingkan dengan Material Design 2. Alih-alih 12 level tetap (Material 2) M3 menawarkan 5 ton dasar (tones), yang masing-masing sesuai dengan level elevation tertentu. Selain itu, M3 memperkenalkan konsep „bayangan berwarna" (color shadow) di Android 12+: bayangan dapat diwarnai dengan warna aksen tema, bukan hitam-abu-abu.

LevelElevationPenggunaanBAYANGAN (tema terang)
Level 00 dpLatar belakang, kontainer SurfaceTanpa bayangan
Level 11 dpKartu, ListItem, menu0.05 opacity, 2px blur
Level 23 dpSearch bar, Bottom navigation0.08 opacity, 4px blur
Level 36 dpFAB, FloatingActionButton0.11 opacity, 8px blur
Level 48 dpSnackbar, Bottom sheet0.12 opacity, 12px blur
Level 512 dpNavigation drawer, Dialog0.14 opacity, 16px blur
Level 624 dpModal dialog, Popup menu0.15 opacity, 24px blur

Interaction elevation — peningkatan sementara elevation saat pengguna berinteraksi dengan elemen. Di Material Design 3, elemen interaktif (tombol, kartu) mendapatkan +1–2 dp ke elevation dasar saat ditekan (pressed state) atau fokus (focused state). Untuk FloatingActionButton, interaction elevation adalah +6 dp. Animasi transisi antar status harus berlangsung 150–200 ms untuk respons taktil alami.

Elevation di Jetpack Compose

Jetpack Compose mendukung elevation melalui komponen Card dan Surface, yang memiliki parameter elevation bawaan. Tidak seperti View System, Compose menggambar bayangan melalui mesin render sendiri, yang memastikan perilaku yang sama di semua versi Android (API 21+). Modifier.shadow() — pengubah level rendah untuk menambahkan bayangan ke composable apa pun.

kotlin
// Jetpack Compose: elevation melalui Surface dan Card
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Surface

Card(
    elevation = CardDefaults.cardElevation(
        defaultElevation = 4.dp,
        pressedElevation = 8.dp,
        focusedElevation = 6.dp
    ),
    colors = CardDefaults.cardColors(
        containerColor = MaterialTheme.colorScheme.surface
    )
) {
    Text("Kartu yang dikelola elevation")
}

// Modifier.shadow untuk bentuk kustom
Surface(
    modifier = Modifier
        .shadow(elevation = 6.dp, shape = RoundedCornerShape(16.dp))
        .clickable { /* aksi */ },
    shape = RoundedCornerShape(16.dp),
    color = MaterialTheme.colorScheme.surface
) { Text("Permukaan dengan bayangan") }

Animasi elevation di Compose diimplementasikan melalui animateFloatAsState atau Animatable. Saat elevation berubah, Compose secara otomatis menganimasi bayangan. Untuk elemen interaktif, gunakan M3 InteractionSource dalam kombinasi dengan animateElevation agar elevation merespons tekanan, fokus, dan geseran. Material 3 di Compose 1.2+ mendukung color shadow — bayangan yang diwarnai dengan warna primary Container tema.

Elevation di iOS: simulasi tinggi

Di iOS tidak ada analog bawaan elevation dari Material Design. Human Interface Guidelines Apple tidak menggunakan koordinat Z untuk mengelola bayangan — sebaliknya, pengembang mengonfigurasi bayangan secara manual melalui CALayer.shadow*. Namun, konsep hierarki visual melalui bayangan dan kedalaman juga ada di iOS: presentasi modal, UIAlertController, UIPopoverPresentationController — semuanya menggunakan bayangan untuk memisahkan dari latar belakang.

Untuk simulasi elevation di iOS, pengembang menggunakan kombinasi shadowOpacity + shadowRadius + shadowOffset. Semakin tinggi „ketinggian" yang diperlukan, semakin besar radius keburaman dan pergeseran bayangan. Di SwiftUI, bayangan diatur melalui pengubah .shadow() dengan parameter. Untuk perilaku mirip Material di iOS, ada pustaka Material Components for iOS (MDC) dari Google.

swift
// iOS: simulasi elevation melalui CALayer
import UIKit

extension UIView {
    func applyElevation(level: Int) {
        let elevationMap: [Int: (CGFloat, CGFloat, CGFloat)] = [
            1: (0.05, 1, 2),
            2: (0.08, 2, 4),
            3: (0.11, 4, 8),
            4: (0.12, 6, 12),
            5: (0.14, 8, 16),
            6: (0.15, 12, 24)
        ]
        let (opacity, offset, radius) = elevationMap[level] ?? (0.08, 2, 4)
        layer.shadowColor = UIColor.black.cgColor
        layer.shadowOpacity = Float(opacity)
        layer.shadowOffset = CGSize(width: 0, height: offset)
        layer.shadowRadius = radius
        layer.shouldRasterize = true
        layer.rasterizationScale = UIScreen.main.scale
    }
}

// Penggunaan
cardView.applyElevation(level: 3)  // setara 6 dp

Material Components for iOS (MDC-iOS) — pustaka Google yang mem-porting Material Design elevation ke iOS. MDC-iOS menyediakan kelas MDCShadowElevation dengan nilai yang telah ditentukan, MDCShadowLayer untuk menggambar bayangan, dan MDCCard untuk kartu Material dengan elevation yang benar. MDC-iOS mendukung animasi elevation saat ditekan melalui stateful shadow properties.

Pertanyaan yang sering diajukan

Apa perbedaan antara elevation dan translationZ di Android?

Elevation — ketinggian dasar elemen di bidang Z (diatur dalam XML atau kode). translationZ — pergeseran dinamis untuk animasi (misalnya saat ditekan). Tinggi visual = elevation + translationZ. elevation dianimasi melalui ViewPropertyAnimator, translationZ — melalui ObjectAnimator. Gunakan translationZ untuk perubahan tinggi sementara, elevation — untuk permanen.

Mengapa Material Design 3 mengubah sistem elevation?

Material Design 3 menyederhanakan sistem elevation dari 12 menjadi 7 level untuk mengurangi beban kognitif desainer dan pengembang. Alih-alih nilai pasti (2 dp, 4 dp, 8 dp) M3 menggunakan ton (Level 0–6) dengan parameter bayangan yang telah ditentukan. Di Android 12+ telah ditambahkan dukungan untuk bayangan berwarna (color shadow) yang menyesuaikan dengan tema aplikasi.

Bagaimana elevation memengaruhi kinerja Android?

Elevation sendiri tidak memengaruhi kinerja, karena bayangan digambar secara hardware (GPU). Namun, perubahan elevation yang sering (setiap frame saat animasi) dapat menyebabkan penggambaran ulang View dan area sekitarnya. Untuk animasi gunakan translationZ daripada mengubah elevation, karena translationZ dioptimalkan untuk perubahan yang sering. Untuk layar kompleks dengan 20+ elemen dengan elevation, aktifkan view.setLayerType(View.LAYER_TYPE_HARDWARE, null).

Bagaimana membuat elevation hanya untuk bayangan, tanpa mengangkat elemen?

Di Android, elevation selalu mengangkat elemen di atas latar belakang dan mengubah urutan gambar (z-order). Jika hanya membutuhkan bayangan tanpa mengubah z-order, gunakan cardUseCompatPadding di CardView atau penggambaran bayangan kustom melalui Paint.setShadowLayer() di onDraw(). Di Jetpack Compose gunakan Modifier.graphicsLayer { shadowElevation = 4f }.

Berapa elevation komponen standar Android?

Komponen Material Design memiliki elevation tetap: FloatingActionButton — 6 dp (saat ditekan 12 dp), CardView — 1–8 dp (dapat dikonfigurasi), BottomNavigationView — 8 dp, Toolbar — 4 dp, Snackbar — 6 dp, Dialog — 24 dp. MaterialButton dari Material Components Library memiliki elevation 2 dp dengan kenaikan ke 8 dp saat ditekan.

Ringkasan

  • Elevation — tinggi Z elemen di Material Design, diukur dalam dp, yang menentukan bayangan dan urutan gambar.
  • Di Android, elevation diatur melalui properti View sejak API 21, dan translationZ — untuk animasi.
  • OutlineProvider — wajib untuk bayangan yang benar pada elemen dengan sudut membulat.
  • Material Design 3 menggunakan 7 level elevation: Level 0 (0 dp) — Level 6 (24 dp).
  • Jetpack Compose mengelola elevation melalui CardDefaults.cardElevation() dan Modifier.shadow().
  • Di iOS, elevation disimulasikan melalui CALayer.shadow dengan parameter opacity/offset/radius yang telah ditentukan.
  • Interaction elevation (+1–6 dp) menciptakan umpan balik taktil saat menekan elemen interaktif.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga