Elevation — mga batayan, anino at Z-coordinate sa Android

May-akda: IT Sectr Nai-publish: 2026-02-28 Oras ng pagbabasa: 9 min

Elevation — pangunahing konsepto ng Material Design na tumutukoy sa taas ng elemento sa kahabaan ng Z-axis (patayo sa screen). Ang elevation ay sinusukat sa dp at direktang nakakaapekto sa laki at paglabo ng anino na inihagis ng elemento. Kung mas mataas ang elevation, mas malapit ang elemento sa gumagamit at mas kapansin-pansin ang visual weight nito. Ayon sa Material Design 3 (Google, 2026), ang karaniwang elevation para sa mga card ay 1 dp, para sa FloatingActionButton — 6 dp, para sa mga dialog — 24 dp. Magbasa nang higit pa tungkol sa pagpapatupad ng mga anino sa artikulo tungkol sa mga anino sa UI.

Mga pangunahing punto

  • Elevation — taas ng elemento kaugnay ng ibabaw ng screen, sinusukat sa dp (Android).
  • Sa Android, ang elevation ay pinamamahalaan sa pamamagitan ng parehong pangalan na View property o sa pamamagitan ng translationZ para sa animasyon.
  • OutlineProvider tumutukoy sa hugis ng elemento kung saan iginuhit ang anino mula sa elevation.
  • Ang Material Design 3 ay gumagamit ng 5 pangunahing antas ng elevation: 0, 1, 3, 6, 8, 12 at 24 dp.
  • Sa iOS walang direktang analog ng elevation — ang taas ay sinasabayan sa pamamagitan ng CALayer.shadow na may mga parameter.

Ano ang elevation?

Elevation — ay isang sukatan na ipinakilala sa Material Design (Google I/O 2014) na naglalarawan sa posisyon ng elemento sa kahabaan ng Z-axis. Hindi tulad ng X at Y (dalawang-dimensional na eroplano ng screen), ang Z ay ang taas sa itaas ng eroplano. Ang elevation ay ipinapahayag sa dp (density-independent pixels) at tumutukoy sa dalawang visual na epekto: anino (shadow) na nagiging mas malaki at mas malabo habang tumataas ang elevation, at pagkakasunud-sunod ng pagguhit (mga elemento na may mas mataas na elevation ay iginuhit sa itaas ng mga elemento na may mas mababang elevation).

Pisikal na metapora: isipin ang mga piraso ng papel sa isang mesa. Kung mas mataas ang tumpok, mas mahaba ang anino mula sa pinakamataas na piraso. Elevation sa Material Design ay gumagana nang eksaktong pareho: bawat elemento ay isang „digital na piraso" sa isang tiyak na taas. Kapag ang gumagamit ay nakikipag-ugnayan sa elemento (pumipindot ng buton, nag-angat ng card), ang elevation ay pansamantalang tumataas — ito ay tinatawag na „elevasyon sa interaksyon" (interaction elevation).

Ayon sa Material Design Guidelines (Google, 2026), ang tamang paggamit ng elevation ay nagpapabuti sa kakayahang i-scan ang interface ng 35%: mas mabilis na nahahanap ng mga gumagamit ang mga interactive na elemento dahil sila ay „lumalabas" sa itaas ng patag na nilalaman. Gayunpaman, ang labis na bilang ng mga antas ng elevation (higit sa 4) ay nagbabawas sa epektong ito: kung ang lahat ng elemento ay lumulutang, wala ni isa ang mukhang mahalaga.

Elevation sa Android: mga property at API

Sa Android ang elevation ay ipinatupad bilang isang built-in na property ng View mula API 21 (Android 5.0 Lollipop). Ang View.elevation ay nagtatakda ng batayang taas sa mga pixel (px), at View.translationZ — karagdagang paglilipat para sa mga animasyon (halimbawa, kapag pinindot). Kabuuang visual na taas = elevation + translationZ. Parehong property ay sumusuporta sa animasyon sa pamamagitan ng ViewPropertyAnimator o ObjectAnimator.

xml
<!-- XML: elevation at 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="Button na may elevasyon" />

StateListAnimator — isang XML na mapagkukunan para sa pag-animate ng elevation at translationZ depende sa estado ng View (pressed, focused, enabled). Halimbawa, kapag pinindot ang isang buton, ang elevation ay maaaring tumaas mula 2 dp hanggang 8 dp, na lumilikha ng epekto ng pag-angat. Ang StateListAnimator ay sumusuporta sa animasyon sa pamamagitan ng ObjectAnimator para sa anumang mga property ng View.

kotlin
// Kotlin: programatikong pagsasaayos ng elevation
import android.animation.ObjectAnimator
import android.view.View

val myButton: View = findViewById(R.id.myButton)
myButton.elevation = 4f  // batayang taas sa px

// Animasyon ng elevation kapag pinindot
val animator = ObjectAnimator.ofFloat(
    myButton,
    "translationZ",
    0f,
    8f
).apply {
    duration = 150
    repeatMode = ValueAnimator.REVERSE
    repeatCount = 1
}

OutlineProvider — pangunahing bahagi para sa tamang pagguhit ng anino mula sa elevation. Bilang default, ang Android ay gumagamit ng ViewOutlineProvider.BACKGROUND, na lumilikha ng contour batay sa background drawable. Para sa View na may bilugan na mga sulok (sa pamamagitan ng shape drawable) kailangan magtakda ng custom na OutlineProvider, kung hindi ang anino ay magiging parihaba. Ang mga bahagi ng Material (CardView, MaterialButton) ay awtomatikong namamahala ng OutlineProvider.

Mga antas ng elevation sa Material Design 3

Material Design 3 (Material You) ay binago ang sistema ng elevation kumpara sa Material Design 2. Sa halip na 12 nakapirming antas (Material 2) ang M3 ay nag-aalok ng 5 pangunahing tono (tones), na bawat isa ay tumutugma sa isang tiyak na antas ng elevation. Bilang karagdagan, ang M3 ay nagpapakilala ng konsepto ng „may kulay na anino" (color shadow) sa Android 12+: ang anino ay maaaring kulayan sa accent na kulay ng tema, sa halip na itim-kulay-abo.

AntasElevationGamitANINO (maliwanag na tema)
Level 00 dpMga background, mga container ng SurfaceWalang anino
Level 11 dpMga card, 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 — pansamantalang pagtaas ng elevation sa pakikipag-ugnayan ng gumagamit sa elemento. Sa Material Design 3, ang mga interactive na elemento (mga buton, card) ay nakakakuha ng +1–2 dp sa batayang elevation kapag pinindot (pressed state) o nakatutok (focused state). Para sa FloatingActionButton, ang interaction elevation ay +6 dp. Ang animasyon ng paglipat sa pagitan ng mga estado ay dapat tumagal ng 150–200 ms para sa natural na tactile na tugon.

Elevation sa Jetpack Compose

Jetpack Compose ay sumusuporta sa elevation sa pamamagitan ng mga bahagi ng Card at Surface, na may built-in na parameter ng elevation. Hindi tulad ng View System, ang Compose ay gumuhit ng mga anino sa pamamagitan ng sarili nitong render engine, na tinitiyak ang parehong pag-uugali sa lahat ng bersyon ng Android (API 21+). Modifier.shadow() — isang mababang antas na modifier para sa pagdaragdag ng anino sa anumang composable.

kotlin
// Jetpack Compose: elevation sa pamamagitan ng Surface at 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("Card na pinamamahalaan ng elevation")
}

// Modifier.shadow para sa mga custom na hugis
Surface(
    modifier = Modifier
        .shadow(elevation = 6.dp, shape = RoundedCornerShape(16.dp))
        .clickable { /* aksyon */ },
    shape = RoundedCornerShape(16.dp),
    color = MaterialTheme.colorScheme.surface
) { Text("Ibabaw na may anino") }

Animasyon ng elevation sa Compose ay ipinatupad sa pamamagitan ng animateFloatAsState o Animatable. Kapag nagbago ang elevation, awtomatikong ina-animate ng Compose ang anino. Para sa mga interactive na elemento, gamitin ang M3 InteractionSource kasama ng animateElevation upang ang elevation ay tumugon sa mga pindot, focus, at pag-drag. Ang Material 3 sa Compose 1.2+ ay sumusuporta sa color shadow — anino na may kulay ng primary Container ng tema.

Elevation sa iOS: pagsasabay ng taas

Sa iOS walang built-in na analog ng elevation mula sa Material Design. Ang Human Interface Guidelines ng Apple ay hindi gumagamit ng Z-coordinate para sa pamamahala ng mga anino — sa halip, ang mga developer ay nagko-configure ng mga anino nang manu-mano sa pamamagitan ng CALayer.shadow*. Gayunpaman, ang konsepto ng visual na hierarchy sa pamamagitan ng mga anino at lalim ay umiiral din sa iOS: mga modal presentation, UIAlertController, UIPopoverPresentationController — lahat sila ay gumagamit ng mga anino para sa paghihiwalay mula sa background.

Para sa pagsasabay ng elevation sa iOS, ang mga developer ay gumagamit ng kombinasyon ng shadowOpacity + shadowRadius + shadowOffset. Kung mas mataas ang kinakailangang „taas", mas malaki ang radius ng paglabo at paglilipat ng anino. Sa SwiftUI, ang mga anino ay itinatakda sa pamamagitan ng modifier na .shadow() na may mga parameter. Para sa pag-uugaling tulad ng Material sa iOS, may mga library na Material Components for iOS (MDC) mula sa Google.

swift
// iOS: pagsasabay ng elevation sa pamamagitan ng 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
    }
}

// Paggamit
cardView.applyElevation(level: 3)  // katumbas ng 6 dp

Material Components for iOS (MDC-iOS) — library ng Google na nagpo-port ng Material Design elevation sa iOS. Ang MDC-iOS ay nagbibigay ng klase na MDCShadowElevation na may mga paunang natukoy na halaga, MDCShadowLayer para sa pagguhit ng anino, at MDCCard para sa mga Material card na may tamang elevation. Ang MDC-iOS ay sumusuporta sa animasyon ng elevation kapag pinindot sa pamamagitan ng stateful shadow properties.

Mga madalas itanong

Ano ang pagkakaiba sa pagitan ng elevation at translationZ sa Android?

Elevation — batayang taas ng elemento sa Z-plane (itinakda sa XML o code). translationZ — dinamikong paglilipat para sa animasyon (halimbawa, kapag pinindot). Visual na taas = elevation + translationZ. Ang elevation ay ina-animate sa pamamagitan ng ViewPropertyAnimator, translationZ — sa pamamagitan ng ObjectAnimator. Gamitin ang translationZ para sa pansamantalang pagbabago ng taas, elevation — para sa permanente.

Bakit binago ng Material Design 3 ang sistema ng elevation?

Pinasimple ng Material Design 3 ang sistema ng elevation mula 12 hanggang 7 antas upang mabawasan ang cognitive load ng mga designer at developer. Sa halip ng eksaktong mga halaga (2 dp, 4 dp, 8 dp) ang M3 ay gumagamit ng mga tono (Level 0–6) na may paunang natukoy na mga parameter ng anino. Sa Android 12+ ay idinagdag ang suporta para sa mga may kulay na anino (color shadow) na umaangkop sa tema ng application.

Paano nakakaapekto ang elevation sa pagganap ng Android?

Ang elevation mismo ay hindi nakakaapekto sa pagganap, dahil ang anino ay iginuhit ng hardware (GPU). Gayunpaman, ang madalas na pagbabago ng elevation (bawat frame sa animasyon) ay maaaring maging sanhi ng pag-redraw ng View at mga katabing lugar. Para sa animasyon gamitin ang translationZ sa halip na baguhin ang elevation, dahil ang translationZ ay na-optimize para sa madalas na pagbabago. Para sa mga kumplikadong screen na may 20+ elemento na may elevation, paganahin ang view.setLayerType(View.LAYER_TYPE_HARDWARE, null).

Paano gumawa ng elevation para lamang sa anino, nang hindi inaangat ang elemento?

Sa Android, ang elevation ay palaging nag-aangat ng elemento sa itaas ng background at nagbabago ng pagkakasunud-sunod ng pagguhit (z-order). Kung kailangan lamang ng anino nang hindi binabago ang z-order, gamitin ang cardUseCompatPadding sa CardView o custom na pagguhit ng anino sa pamamagitan ng Paint.setShadowLayer() sa onDraw(). Sa Jetpack Compose gamitin ang Modifier.graphicsLayer { shadowElevation = 4f }.

Ano ang elevation ng mga karaniwang bahagi ng Android?

Ang mga bahagi ng Material Design ay may nakapirming elevation: FloatingActionButton — 6 dp (kapag pinindot 12 dp), CardView — 1–8 dp (napapa-configure), BottomNavigationView — 8 dp, Toolbar — 4 dp, Snackbar — 6 dp, Dialog — 24 dp. Ang MaterialButton mula sa Material Components Library ay may elevation na 2 dp na may pagtaas sa 8 dp kapag pinindot.

Buod

  • Elevation — Z-taas ng elemento sa Material Design, sinusukat sa dp, na tumutukoy sa anino at pagkakasunud-sunod ng pagguhit.
  • Sa Android, ang elevation ay itinatakda sa pamamagitan ng View property mula API 21, at translationZ — para sa mga animasyon.
  • OutlineProvider — kinakailangan para sa tamang anino ng mga elemento na may bilugan na mga sulok.
  • Ang Material Design 3 ay gumagamit ng 7 antas ng elevation: Level 0 (0 dp) — Level 6 (24 dp).
  • Jetpack Compose ay namamahala ng elevation sa pamamagitan ng CardDefaults.cardElevation() at Modifier.shadow().
  • Sa iOS, ang elevation ay sinasabayan sa pamamagitan ng CALayer.shadow na may paunang natukoy na mga parameter na opacity/offset/radius.
  • Ang Interaction elevation (+1–6 dp) ay lumilikha ng tactile feedback kapag pinipindot ang mga interactive na elemento.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din