Android Academy · Les

Overzicht van CameraX

Waarom CameraX beter is dan de oude camera-API's.

Les 1 van 413 stappen

Overzicht van CameraX is een gratis Android Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Android Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Android Academy bevat in totaal 4 lessen.

Waarom CameraX?

Een camera toevoegen aan een Android-app was vroeger lastig. De oude android.hardware.camera2-API is krachtig, maar extreem uitgebreid, en werkt verschillend op de duizenden apparaten die in gebruik zijn.

CameraX is een Jetpack-bibliotheek die boven op Camera2 werkt en je een eenvoudige, levenscyclusbewuste en consistente API biedt. In deze cursus gebruik je CameraX om een livevoorbeeld te tonen, foto's te maken en video op te nemen.

Wat CameraX oplost

CameraX is ontworpen rond drie doelen:

  • Gebruiksgemak — veel minder standaardcode dan bij Camera2.
  • Consistentie — Google test het met een groot apparaatlaboratorium, zodat afwijkende apparaten zich voorspelbaar gedragen.
  • Levenscyclusbewustzijn — de camera start en stopt automatisch volgens de levenscyclus van je scherm, zodat je de camera niet laat lekken.

Je beschrijft wat je wilt (een voorbeeld, een foto of een video) en CameraX bepaalt hoe dit op het huidige apparaat moet gebeuren.

De drie belangrijkste gebruiksscenario's

CameraX is opgebouwd rond gebruiksscenario's. Een gebruiksscenario is een zelfstandig onderdeel van de camerafunctionaliteit. De drie belangrijkste zijn:

  • Preview — tonen wat de camera op het scherm ziet.
  • ImageCapture — een foto maken.
  • VideoCapture — video opnemen.

Je maakt de gebruiksscenario's die je nodig hebt en koppelt ze aan de camera.

// You create the use cases you need:
val preview = Preview.Builder().build()
val imageCapture = ImageCapture.Builder().build()
// Later you bind them to a lifecycle and a camera.

Afhankelijkheden toevoegen

CameraX wordt geleverd als meerdere artefacten. Je voegt deze toe aan de build.gradle.kts van je module. Een gebruikelijke configuratie bevat de kernbibliotheek, de camera2-backend, levenscyclusintegratie en weergavehulpmiddelen.

Gebruik voor alle CameraX-artefacten dezelfde versie om conflicten te voorkomen.

dependencies {
    val cameraxVersion = "1.3.4"
    implementation("androidx.camera:camera-core:$cameraxVersion")
    implementation("androidx.camera:camera-camera2:$cameraxVersion")
    implementation("androidx.camera:camera-lifecycle:$cameraxVersion")
    implementation("androidx.camera:camera-view:$cameraxVersion")
    implementation("androidx.camera:camera-video:$cameraxVersion")
}

Toestemmingen declareren

Als je de camera wilt gebruiken, moet je de toestemming CAMERA declareren in je AndroidManifest.xml. Als je ook video opneemt, heb je mogelijk RECORD_AUDIO nodig.

Dit zijn runtime-toestemmingen — declareren is niet voldoende; je moet de gebruiker ook tijdens runtime om toestemming vragen (dit wordt in latere lessen behandeld).

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature
    android:name="android.hardware.camera.any"
    android:required="false" />

De CameraProvider

Het toegangspunt voor CameraX is ProcessCameraProvider. Dit koppelt gebruiksscenario's aan de camera en aan de levenscyclus van je scherm.

Je haalt dit asynchroon op met getInstance(), dat een ListenableFuture retourneert. Vanuit Kotlin kun je hier binnen een coroutine await() op uitvoeren.

import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.core.ExperimentalGetImage

suspend fun Context.getCameraProvider(): ProcessCameraProvider {
    return ProcessCameraProvider.getInstance(this).await()
}

Gebruiksscenario's aan een levenscyclus koppelen

Wanneer je de provider hebt, koppel je je gebruiksscenario's aan een LifecycleOwner en een CameraSelector (de camera aan de voor- of achterzijde).

Omdat deze koppeling levenscyclusbewust is, opent CameraX de camera automatisch wanneer je scherm zichtbaar is en sluit het deze wanneer dat niet zo is — handmatig opruimen is niet nodig.

val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
    lifecycleOwner,
    cameraSelector,
    preview,
    imageCapture
)

Een camera kiezen

Een CameraSelector vertelt CameraX welke fysieke camera moet worden gebruikt. De twee meest voorkomende zijn de standaardcamera aan de achterzijde en de standaardcamera aan de voorzijde.

Je kunt ook een aangepaste selector bouwen om specifieke eigenschappen te vereisen, maar de standaardopties zijn geschikt voor vrijwel elke app.

// Back camera (most common for photos)
val back = CameraSelector.DEFAULT_BACK_CAMERA

// Front camera (selfies, video calls)
val front = CameraSelector.DEFAULT_FRONT_CAMERA

// Toggle between them by swapping the selector and re-binding.

PreviewView: het weergaveoppervlak

CameraX rendert het livevoorbeeld in een PreviewView. Dit is een gewone Android-View die het oppervlak, schalen en draaien voor je afhandelt.

In Jetpack Compose voeg je deze toe met AndroidView, waarmee je een klassieke View in een composable kunt plaatsen. In de volgende les werk je dit volledig uit.

AndroidView(
    factory = { context ->
        PreviewView(context).apply {
            scaleType = PreviewView.ScaleType.FILL_CENTER
        }
    },
    modifier = Modifier.fillMaxSize()
)

Levenscyclusbewustzijn in de praktijk

De grootste praktische winst van CameraX is het levenscyclusbewustzijn. Met Camera2 moest je de camera handmatig openen in onResume en vrijgeven in onPause. Als je dat vergat, leidde dat tot crashes of een vastgelopen camera.

Met CameraX handelt het framework dit allemaal af zodra je bindToLifecycle gebruikt. Wanneer de gebruiker weg navigeert, wordt de camera automatisch vrijgegeven; wanneer de gebruiker terugkeert, wordt deze opnieuw geopend.

// No manual open/close needed.
// bindToLifecycle ties the camera to the screen's
// lifecycle, so it follows onStart/onStop for you.
cameraProvider.bindToLifecycle(lifecycleOwner, selector, preview)

Je mentale model

Houd dit beeld gedurende de rest van de cursus in gedachten:

  • Haal een ProcessCameraProvider op.
  • Bouw de gebruiksscenario's die je nodig hebt (Preview, ImageCapture, VideoCapture).
  • Kies een CameraSelector.
  • Gebruik bindToLifecycle om alles te verbinden.

Elke CameraX-functie is slechts een variant op deze vier stappen.

Korte controle

Test je begrip van de basisprincipes van CameraX.

Samenvatting

Je begrijpt nu het grote geheel van CameraX:

  • CameraX verpakt Camera2 in een eenvoudigere, consistentere en levenscyclusbewuste API.
  • Het is opgebouwd rond gebruiksscenario's: Preview, ImageCapture en VideoCapture.
  • Je voegt de CameraX-artefacten toe, declareert de toestemming CAMERA, haalt een ProcessCameraProvider op en gebruikt bindToLifecycle.
  • Een CameraSelector kiest tussen de camera aan de voor- en achterzijde; een PreviewView toont de camerabeelden.

Vervolgens verbind je een echte livepreview met het scherm.

Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
36
Lessen
152

Veelgestelde vragen

Is de les “Overzicht van CameraX” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Android Academy, waaronder “Overzicht van CameraX”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Android Academy bevat in totaal 4 lessen.

Wat leer ik in “Overzicht van CameraX”?

Waarom CameraX beter is dan de oude camera-API's. Je oefent met Android Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Android Academy te beginnen?

Ervaring vooraf is niet nodig. Android Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Overzicht van CameraX”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Android Academy?

Ja. Elke les over Android Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Overzicht van CameraX
  2. Een cameravoorbeeld tonen
  3. Foto's maken
  4. Video opnemen
← Terug naar Android Academy