CameraX para Kotlin: guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

CameraX para Kotlin: guía completa con ejemplos prácticos

1. ¿Qué es y para qué sirve?

CameraX es una biblioteca de Google para desarrollar aplicaciones de cámara en Android, escrita en Kotlin y Java. Proporciona una API simple y consistente para trabajar con la cámara, abstrayendo la complejidad de las API de bajo nivel como Camera2. CameraX resuelve muchos problemas comunes para los desarrolladores: soporte para diferentes versiones de Android, compatibilidad con diversos fabricantes de dispositivos, manejo del ciclo de vida de Activity/Fragment y rotaciones de pantalla.

¿Para qué sirve CameraX? Primero, simplifica enormemente el desarrollo: en lugar de cientos de líneas de código para configurar la cámara, la vista previa y la captura de imágenes, escribes solo 10-20 líneas. Segundo, garantiza compatibilidad con dispositivos desde Android 5.0 (API 21) en adelante. Tercero, CameraX maneja automáticamente escenarios complejos como cambiar entre cámaras, ajustar la orientación y preservar el estado al rotar la pantalla. Cuarto, la biblioteca incluye extensiones integradas (Extensions) como HDR, modo nocturno y modo retrato, que funcionan en la mayoría de dispositivos sin configuración adicional.

CameraX es ideal para aplicaciones que requieren integración rápida de cámara: mensajería, redes sociales, escáneres de códigos QR, videollamadas y cámaras simples. Si necesitas crear una aplicación profesional con control total sobre cada fotograma (por ejemplo, para visión artificial o grabación de video profesional), quizás debas considerar Camera2, pero para el 90% de los casos, CameraX es la mejor opción.

2. Instalación

CameraX se instala mediante el sistema de compilación Gradle. Para un proyecto en Kotlin, agrega las dependencias en el archivo build.gradle (Module: app).

Comando exacto (Gradle):

dependencies {
    // Core CameraX
    def camerax_version = "1.3.1"
    implementation "androidx.camera:camera-core:${camerax_version}"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    implementation "androidx.camera:camera-lifecycle:${camerax_version}"
    implementation "androidx.camera:camera-view:${camerax_version}"

    // Si necesitas extensiones (HDR, modo nocturno, etc.)
    implementation "androidx.camera:camera-extensions:${camerax_version}"

    // Para video
    implementation "androidx.camera:camera-video:${camerax_version}"
}

Asegúrate también de que en build.gradle (Project) esté configurado el repositorio de Google:

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

Después de agregar las dependencias, sincroniza el proyecto (Sync Now).

3. Inicio rápido — ejemplo mínimo funcional

Crea un nuevo Activity o Fragment. En el diseño (XML), agrega un PreviewView:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.camera.view.PreviewView
        android:id="@+id/viewFinder"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Ahora el código del Activity en Kotlin:

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors

class MainActivity : AppCompatActivity() {
    private lateinit var cameraExecutor: E                    

Recommendations