Elevation — temel bilgiler, gölgeler ve Android'de Z koordinatı

Yazar: IT Sectr Yayınlanma: 2026-02-28 Okuma süresi: 9 dk

Elevation, bir öğenin z-ekseni (ekrana dik) boyunca yüksekliğini tanımlayan temel bir Material Design kavramıdır. Elevation dp cinsinden ölçülür ve öğenin oluşturduğu gölgenin boyutunu ve bulanıklığını doğrudan etkiler. Elevation ne kadar yüksekse, öğe kullanıcıya o kadar yakın ve görsel ağırlığı o kadar belirgindir. Material Design 3'e (Google, 2026) göre, kartlar için standart elevation 1 dp, FloatingActionButton için — 6 dp, diyaloglar için — 24 dp'dir. Gölge uygulaması hakkında daha fazla bilgi için UI'da gölgeler makalesine bakın.

Önemli Noktalar

  • Elevation — bir öğenin ekran yüzeyine göre yüksekliği, dp (Android) cinsinden ölçülür.
  • Android'de elevation, aynı adlı View özelliği veya animasyonlar için translationZ aracılığıyla kontrol edilir.
  • OutlineProvider, elevation gölgesinin oluşturulduğu öğenin şeklini tanımlar.
  • Material Design 3, 5 temel elevation seviyesi kullanır: 0, 1, 3, 6, 8, 12 ve 24 dp.
  • iOS'ta elevation'ın doğrudan bir benzeri yoktur — yükseklik, parametrelerle CALayer.shadow aracılığıyla simüle edilir.

Elevation nedir?

Elevation, Material Design'da (Google I/O 2014) tanıtılan ve bir öğenin z-ekseni boyunca konumunu tanımlayan bir metriktir. x ve y'nin (ekranın iki boyutlu düzlemi) aksine, z düzlemin üzerindeki yüksekliktir. Elevation, dp (yoğunluktan bağımsız piksel) cinsinden ifade edilir ve iki görsel efekt belirler: elevation arttıkça büyüyen ve bulanıklaşan gölge ve çizim sırası (yüksek elevation'a sahip öğeler, düşük elevation'a sahip öğelerin üzerine çizilir).

Fiziksel metafor: bir masadaki kağıt yapraklarını hayal edin. Yığın ne kadar yüksekse, üstteki yaprağın gölgesi o kadar uzun olur. Material Design'daki Elevation da tamamen aynı şekilde çalışır — her öğe belirli bir yükseklikte “dijital bir yaprak”dır. Bir kullanıcı bir öğeyle etkileşime girdiğinde (bir düğmeye basar, bir kartı kaldırır), elevation geçici olarak artar — buna “etkileşim elevation'ı” denir.

Material Design Guidelines'a (Google, 2026) göre, elevation'ın doğru kullanımı arayüzün taranabilirliğini %35 artırır: kullanıcılar etkileşimli öğeleri daha hızlı bulur çünkü bunlar düz içeriğin üzerinde “öne çıkar.” Ancak, aşırı sayıda elevation seviyesi (4'ten fazla) bu etkiyi azaltır — her şey yüzüyorsa, hiçbir şey önemli görünmez.

Android'de Elevation: özellikler ve API

Android'de elevation, API 21'den (Android 5.0 Lollipop) itibaren View'in yerleşik bir özelliği olarak uygulanmıştır. View.elevation, piksel (px) cinsinden temel yüksekliği ayarlar ve View.translationZ, animasyonlar için ek kaydırma sağlar (örneğin, basıldığında). Toplam görsel yükseklik = elevation + translationZ. Her iki özellik de ViewPropertyAnimator veya ObjectAnimator aracılığıyla animasyonu destekler.

xml
<!-- XML: elevation ve 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="Elevasyonlu düğme" />

StateListAnimator — View durumuna (basılı, odaklanmış, etkin) bağlı olarak elevation ve translationZ'yi canlandırmak için bir XML kaynağıdır. Örneğin, bir düğmeye basıldığında, elevation 2 dp'den 8 dp'ye yükselerek bir kaldırma efekti oluşturabilir. StateListAnimator, herhangi bir View özelliği için ObjectAnimator aracılığıyla animasyonu destekler.

kotlin
// Kotlin: programatik elevation kurulumu
import android.animation.ObjectAnimator
import android.view.View

val myButton: View = findViewById(R.id.myButton)
myButton.elevation = 4f  // px cinsinden temel yükseklik

// Basıldığında elevation animasyonu
val animator = ObjectAnimator.ofFloat(
    myButton,
    "translationZ",
    0f,
    8f
).apply {
    duration = 150
    repeatMode = ValueAnimator.REVERSE
    repeatCount = 1
}

OutlineProvider — elevation gölgesinin doğru şekilde oluşturulması için önemli bir bileşendir. Varsayılan olarak Android, arka plan drawable'ına dayalı bir kontur oluşturan ViewOutlineProvider.BACKGROUND kullanır. Yuvarlak köşeli View'ler (shape drawable aracılığıyla) için özel bir OutlineProvider ayarlanmalıdır, aksi takdirde gölge dikdörtgen olur. Material bileşenleri (CardView, MaterialButton), OutlineProvider'ı otomatik olarak yönetir.

Material Design 3'te Elevation Seviyeleri

Material Design 3 (Material You), Material Design 2'ye kıyasla elevation sistemini revize etmiştir. 12 sabit seviye (Material 2) yerine, M3 her biri belirli bir elevation seviyesine karşılık gelen 5 temel ton sunar. Ek olarak, M3, Android 12+'da “renkli gölge” kavramını tanıtır: gölge, siyah-gri olmak yerine temanın vurgu rengiyle renklendirilebilir.

SeviyeElevationKullanımGölge (açık tema)
Seviye 00 dpArka planlar, Surface kaplarıGölge yok
Seviye 11 dpKartlar, ListItem, menüler0.05 opaklık, 2px bulanıklık
Seviye 23 dpArama çubuğu, alt gezinme0.08 opaklık, 4px bulanıklık
Seviye 36 dpFAB, FloatingActionButton0.11 opaklık, 8px bulanıklık
Seviye 48 dpSnackbar, Bottom sheet0.12 opaklık, 12px bulanıklık
Seviye 512 dpGezinme çekmecesi, Diyalog0.14 opaklık, 16px bulanıklık
Seviye 624 dpModal diyalog, açılır menü0.15 opaklık, 24px bulanıklık

Etkileşim elevation'ı — bir kullanıcının bir öğeyle etkileşimi sırasında elevation'ın geçici olarak artmasıdır. Material Design 3'te, etkileşimli öğeler (düğmeler, kartlar) basıldığında (pressed durumu) veya odaklandığında (focused durumu) temel elevation'larına +1–2 dp kazanır. FloatingActionButton için etkileşim elevation'ı +6 dp'dir. Doğal bir dokunsal geri bildirim için durumlar arasındaki geçiş animasyonu 150–200 ms sürmelidir.

Jetpack Compose'ta Elevation

Jetpack Compose, yerleşik bir elevation parametresine sahip Card ve Surface bileşenleri aracılığıyla elevation'ı destekler. View Sisteminin aksine, Compose gölgeleri kendi işleme motoru aracılığıyla oluşturur ve tüm Android sürümlerinde (API 21+) tutarlı davranış sağlar. Modifier.shadow(), herhangi bir composable'a gölge eklemek için düşük seviyeli bir değiştiricidir.

kotlin
// Jetpack Compose: Surface ve Card ile elevation
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("Elevasyon kontrollü kart")
}

// Özel şekiller için Modifier.shadow
Surface(
    modifier = Modifier
        .shadow(elevation = 6.dp, shape = RoundedCornerShape(16.dp))
        .clickable { /* eylem */ },
    shape = RoundedCornerShape(16.dp),
    color = MaterialTheme.colorScheme.surface
) { Text("Gölgeli yüzey") }

Elevation animasyonu Compose'ta animateFloatAsState veya Animatable aracılığıyla uygulanır. Elevation değiştiğinde, Compose gölgeyi otomatik olarak canlandırır. Etkileşimli öğeler için, elevation'ın basma, odaklanma ve sürüklemeye yanıt vermesi için M3 InteractionSource'u animateElevation ile birlikte kullanın. Compose 1.2+'da Material 3, renkli gölgeyi (temanın primary Container rengiyle renklendirilmiş gölge) destekler.

iOS'ta Elevation: yükseklik simülasyonu

iOS'ta, Material Design'dan elevation'ın yerleşik bir benzeri yoktur. Apple'ın Human Interface Guidelines'ı, gölge yönetimi için z koordinatlarını kullanmaz — bunun yerine geliştiriciler, gölgeleri CALayer.shadow* aracılığıyla manuel olarak yapılandırır. Ancak, gölgeler ve derinlik yoluyla görsel hiyerarşi kavramı iOS'ta da mevcuttur: modal sunumlar, UIAlertController, UIPopoverPresentationController — tümü arka plandan ayrılmak için gölgeler kullanır.

iOS'ta elevation'ı simüle etmek için geliştiriciler, shadowOpacity + shadowRadius + shadowOffset kombinasyonunu kullanır. Gerekli “yükseklik” ne kadar yüksekse, bulanıklık yarıçapı ve gölge kaydırması o kadar büyük olur. SwiftUI'da gölgeler, parametrelerle .shadow() değiştiricisi aracılığıyla ayarlanır. iOS'ta Material benzeri davranış için Google'ın Material Components for iOS (MDC) gibi kütüphaneler mevcuttur.

swift
// iOS: CALayer ile elevation simülasyonu
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
    }
}

// Kullanım
cardView.applyElevation(level: 3)  // 6 dp'ye eşdeğer

Material Components for iOS (MDC-iOS) — Material Design elevation'ı iOS'a taşıyan bir Google kütüphanesidir. MDC-iOS, önceden tanımlanmış değerlerle MDCShadowElevation sınıfını, gölge oluşturma için MDCShadowLayer'ı ve doğru elevation'a sahip Material kartları için MDCCard'ı sağlar. MDC-iOS, durum bilgisi olan gölge özellikleri aracılığıyla basıldığında elevation animasyonunu destekler.

Sıkça Sorulan Sorular

Android'de elevation ve translationZ arasındaki fark nedir?

Elevation — bir öğenin z düzlemindeki temel yüksekliği (XML veya kodda ayarlanır). translationZ — animasyonlar için dinamik bir kaydırma (örneğin, basıldığında). Görsel yükseklik = elevation + translationZ. elevation, ViewPropertyAnimator aracılığıyla, translationZ ise ObjectAnimator aracılığıyla canlandırılır. Geçici yükseklik değişiklikleri için translationZ, kalıcı değişiklikler için elevation kullanın.

Material Design 3 neden elevation sistemini değiştirdi?

Material Design 3, tasarımcılar ve geliştiriciler üzerindeki bilişsel yükü azaltmak için elevation sistemini 12 seviyeden 7 seviyeye basitleştirdi. Kesin değerler (2 dp, 4 dp, 8 dp) yerine M3, önceden tanımlanmış gölge parametrelerine sahip tonlar (Seviye 0–6) kullanır. Android 12+'da, uygulamanın temasına uyum sağlayan renkli gölgeler için destek eklendi.

Elevation, Android performansını nasıl etkiler?

Elevation'ın kendisi performansı etkilemez çünkü gölgeler donanım (GPU) tarafından oluşturulur. Ancak, elevation'da sık yapılan değişiklikler (animasyon sırasında her kare) View'in ve bitişik alanların yeniden çizilmesine neden olabilir. Animasyonlar için, elevation'ı değiştirmek yerine translationZ kullanın, çünkü translationZ sık değişiklikler için optimize edilmiştir. 20'den fazla elevation öğesi olan karmaşık ekranlar için view.setLayerType(View.LAYER_TYPE_HARDWARE, null) öğesini etkinleştirin.

Öğeyi kaldırmadan elevation gölgesi nasıl oluşturulur?

Android'de elevation, öğeyi her zaman arka planın üzerine kaldırır ve çizim sırasını (z-order) değiştirir. Yalnızca gölgeye ihtiyacınız varsa, z-order'ı değiştirmeden CardView'da cardUseCompatPadding kullanın veya onDraw() içinde Paint.setShadowLayer() aracılığıyla özel gölge oluşturma kullanın. Jetpack Compose'ta Modifier.graphicsLayer { shadowElevation = 4f } kullanın.

Standart Android bileşenlerinin elevation'ı nedir?

Material Design bileşenlerinin sabit elevation değerleri vardır: FloatingActionButton — 6 dp (basıldığında 12 dp), CardView — 1–8 dp (yapılandırılabilir), BottomNavigationView — 8 dp, Toolbar — 4 dp, Snackbar — 6 dp, Dialog — 24 dp. Material Components Library'deki MaterialButton, 2 dp elevation'a sahiptir ve basıldığında 8 dp'ye yükselir.

Özet

  • Elevation — Material Design'da bir öğenin z-yüksekliği, dp cinsinden ölçülür, gölgeyi ve çizim sırasını belirler.
  • Android'de elevation, API 21'den itibaren View özelliği aracılığıyla ayarlanır ve animasyonlar için translationZ kullanılır.
  • OutlineProvider — yuvarlak köşeli öğelerde doğru gölgeler için gereklidir.
  • Material Design 3, 7 elevation seviyesi kullanır: Seviye 0 (0 dp) — Seviye 6 (24 dp).
  • Jetpack Compose, elevation'ı CardDefaults.cardElevation() ve Modifier.shadow() aracılığıyla yönetir.
  • iOS'ta elevation, önceden tanımlanmış opaklık/kaydırma/yarıçap parametreleriyle CALayer.shadow aracılığıyla simüle edilir.
  • Etkileşim elevation'ı (+1–6 dp), etkileşimli öğelere basıldığında dokunsal geri bildirim oluşturur.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun