Elevation — het basisconcept van Material Design dat de hoogte van een element langs de Z-as (loodrecht op het scherm) bepaalt. Elevation wordt gemeten in dp en heeft direct invloed op de grootte en vervaging van de schaduw die het element werpt. Hoe hoger de elevation, hoe dichter het element bij de gebruiker is en hoe zichtbaarder het visuele gewicht. Volgens Material Design 3 (Google, 2026) is de standaard elevation voor kaarten 1 dp, voor FloatingActionButton — 6 dp, voor dialoogvensters — 24 dp. Lees meer over de implementatie van schaduwen in het artikel over schaduwen in UI.
Belangrijkste punten
Elevation — is een metriek geïntroduceerd in Material Design (Google I/O 2014) die de positie van een element langs de Z-as beschrijft. In tegenstelling tot X en Y (het tweedimensionale vlak van het scherm), is Z de hoogte boven het vlak. Elevation wordt uitgedrukt in dp (density-independent pixels) en bepaalt twee visuele effecten: schaduw (shadow) die groter en vager wordt naarmate elevation toeneemt, en de tekenvolgorde (elementen met hogere elevation worden boven elementen met lagere elevation getekend).
Fysieke metafoor: stel u vellen papier op een tafel voor. Hoe hoger de stapel, hoe langer de schaduw van het bovenste vel. Elevation in Material Design werkt precies hetzelfde: elk element is een „digitaal vel" op een bepaalde hoogte. Wanneer een gebruiker met een element interageert (een knop indrukt, een kaart optilt), neemt elevation tijdelijk toe — dit wordt „elevatie bij interactie" (interaction elevation) genoemd.
Volgens Material Design Guidelines (Google, 2026) verbetert correct gebruik van elevation de scanbaarheid van de interface met 35%: gebruikers vinden interactieve elementen sneller omdat ze boven de platte inhoud „uitsteken". Een overmatig aantal elevation-niveaus (meer dan 4) vermindert dit effect echter: als alle elementen zweven, lijkt geen enkel element belangrijk.
In Android is elevation geïmplementeerd als een ingebouwde View-eigenschap vanaf API 21 (Android 5.0 Lollipop). View.elevation stelt de basishoogte in pixels (px) in, en View.translationZ — een extra verschuiving voor animaties (bijvoorbeeld bij indrukken). Totale visuele hoogte = elevation + translationZ. Beide eigenschappen ondersteunen animatie via ViewPropertyAnimator of ObjectAnimator.
<!-- XML: elevation en 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="Knop met elevatie" />
StateListAnimator — een XML-bron voor het animeren van elevation en translationZ afhankelijk van de View-status (pressed, focused, enabled). Bijvoorbeeld bij het indrukken van een knop kan elevation toenemen van 2 dp naar 8 dp, waardoor een hefeffect ontstaat. StateListAnimator ondersteunt animatie via ObjectAnimator voor alle View-eigenschappen.
// Kotlin: programmatische configuratie van elevation
import android.animation.ObjectAnimator
import android.view.View
val myButton: View = findViewById(R.id.myButton)
myButton.elevation = 4f // basishoogte in px
// Elevatie-animatie bij indrukken
val animator = ObjectAnimator.ofFloat(
myButton,
"translationZ",
0f,
8f
).apply {
duration = 150
repeatMode = ValueAnimator.REVERSE
repeatCount = 1
}
OutlineProvider — de belangrijkste component voor het correct tekenen van de schaduw van elevation. Standaard gebruikt Android ViewOutlineProvider.BACKGROUND, die een contour maakt op basis van de achtergrond-drawable. Voor View met afgeronde hoeken (via shape drawable) moet een aangepaste OutlineProvider worden ingesteld, anders wordt de schaduw rechthoekig. Material-componenten (CardView, MaterialButton) beheren OutlineProvider automatisch.
Material Design 3 (Material You) heeft het elevation-systeem herzien in vergelijking met Material Design 2. In plaats van 12 vaste niveaus (Material 2) biedt M3 5 basistonen (tones), die elk overeenkomen met een specifiek elevation-niveau. Daarnaast introduceert M3 het concept van „gekleurde schaduw" (color shadow) op Android 12+: de schaduw kan worden gekleurd in de accentkleur van het thema, in plaats van zwart-grijs te zijn.
| Niveau | Elevation | Toepassing | SCHADUW (licht thema) |
|---|---|---|---|
| Level 0 | 0 dp | Achtergronden, Surface-containers | Geen schaduw |
| Level 1 | 1 dp | Kaarten, ListItem, menu's | 0.05 opacity, 2px blur |
| Level 2 | 3 dp | Search bar, Bottom navigation | 0.08 opacity, 4px blur |
| Level 3 | 6 dp | FAB, FloatingActionButton | 0.11 opacity, 8px blur |
| Level 4 | 8 dp | Snackbar, Bottom sheet | 0.12 opacity, 12px blur |
| Level 5 | 12 dp | Navigation drawer, Dialog | 0.14 opacity, 16px blur |
| Level 6 | 24 dp | Modal dialog, Popup menu | 0.15 opacity, 24px blur |
Interaction elevation — tijdelijke verhoging van elevation bij interactie van de gebruiker met een element. In Material Design 3 krijgen interactieve elementen (knoppen, kaarten) +1–2 dp bij de basis-elevation bij indrukken (pressed state) of focus (focused state). Voor FloatingActionButton is de interaction elevation +6 dp. De transitie-animatie tussen toestanden moet 150–200 ms duren voor een natuurlijke tactiele respons.
Jetpack Compose ondersteunt elevation via de componenten Card en Surface, die een ingebouwde elevation-parameter hebben. In tegenstelling tot View System tekent Compose schaduwen via zijn eigen render-engine, wat hetzelfde gedrag garandeert op alle Android-versies (API 21+). Modifier.shadow() — een laag-niveau modifier voor het toevoegen van schaduw aan elke composable.
// Jetpack Compose: elevation via Surface en 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("Door elevation beheerde kaart")
}
// Modifier.shadow voor aangepaste vormen
Surface(
modifier = Modifier
.shadow(elevation = 6.dp, shape = RoundedCornerShape(16.dp))
.clickable { /* actie */ },
shape = RoundedCornerShape(16.dp),
color = MaterialTheme.colorScheme.surface
) { Text("Oppervlak met schaduw") }
Elevatie-animatie in Compose wordt geïmplementeerd via animateFloatAsState of Animatable. Bij wijziging van elevation animeert Compose automatisch de schaduw. Voor interactieve elementen gebruikt u M3 InteractionSource in combinatie met animateElevation zodat elevation reageert op indrukken, focus en slepen. Material 3 in Compose 1.2+ ondersteunt color shadow — schaduw gekleurd in de primaire Container-kleur van het thema.
Op iOS is er geen ingebouwde analogie van elevation uit Material Design. Apple's Human Interface Guidelines gebruiken geen Z-coördinaat voor het beheren van schaduwen — in plaats daarvan configureren ontwikkelaars schaduwen handmatig via CALayer.shadow*. Het concept van visuele hiërarchie door schaduwen en diepte bestaat echter ook op iOS: modale presentaties, UIAlertController, UIPopoverPresentationController — ze gebruiken allemaal schaduwen om zich van de achtergrond te scheiden.
Voor simulatie van elevation op iOS gebruiken ontwikkelaars een combinatie van shadowOpacity + shadowRadius + shadowOffset. Hoe hoger de vereiste „hoogte", hoe groter de vervagingsradius en verschuiving van de schaduw. In SwiftUI worden schaduwen ingesteld via de modifier .shadow() met parameters. Voor Material-achtig gedrag op iOS bestaan er bibliotheken Material Components for iOS (MDC) van Google.
// iOS: simulatie van elevation via 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
}
}
// Gebruik
cardView.applyElevation(level: 3) // equivalent van 6 dp
Material Components for iOS (MDC-iOS) — de Google-bibliotheek die Material Design elevation naar iOS port. MDC-iOS biedt de klasse MDCShadowElevation met vooraf gedefinieerde waarden, MDCShadowLayer voor het tekenen van schaduwen en MDCCard voor Material-kaarten met correcte elevation. MDC-iOS ondersteunt elevatie-animatie bij indrukken via stateful shadow properties.
Veelgestelde vragen
Elevation — de basishoogte van het element in het Z-vlak (ingesteld in XML of code). translationZ — dynamische verschuiving voor animatie (bijvoorbeeld bij indrukken). Visuele hoogte = elevation + translationZ. elevation wordt geanimeerd via ViewPropertyAnimator, translationZ — via ObjectAnimator. Gebruik translationZ voor tijdelijke hoogtewijzigingen, elevation — voor permanente.
Material Design 3 heeft het elevation-systeem vereenvoudigd van 12 naar 7 niveaus om de cognitieve belasting van ontwerpers en ontwikkelaars te verminderen. In plaats van exacte waarden (2 dp, 4 dp, 8 dp) gebruikt M3 tonen (Level 0–6) met vooraf gedefinieerde schaduwparameters. Op Android 12+ is ondersteuning voor gekleurde schaduwen (color shadow) toegevoegd die zich aanpassen aan het thema van de app.
Elevation zelf heeft geen invloed op de prestaties, omdat de schaduw hardwarematig wordt getekend (GPU). Frequente wijzigingen van elevation (elk frame bij animatie) kunnen echter het opnieuw tekenen van View en aangrenzende gebieden veroorzaken. Gebruik voor animatie translationZ in plaats van elevation te wijzigen, omdat translationZ is geoptimaliseerd voor frequente wijzigingen. Voor complexe schermen met 20+ elementen met elevation, schakelt u view.setLayerType(View.LAYER_TYPE_HARDWARE, null) in.
In Android verheft elevation het element altijd boven de achtergrond en verandert het de tekenvolgorde (z-order). Als u alleen schaduw nodig heeft zonder z-order te wijzigen, gebruikt u cardUseCompatPadding in CardView of aangepaste schaduwtekening via Paint.setShadowLayer() in onDraw(). In Jetpack Compose gebruikt u Modifier.graphicsLayer { shadowElevation = 4f }.
Material Design-componenten hebben vaste elevation: FloatingActionButton — 6 dp (bij indrukken 12 dp), CardView — 1–8 dp (instelbaar), BottomNavigationView — 8 dp, Toolbar — 4 dp, Snackbar — 6 dp, Dialog — 24 dp. MaterialButton uit Material Components Library heeft elevation 2 dp met verhoging naar 8 dp bij indrukken.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook