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 También en la biblioteca
Métricas de Prometheus en Go (Golang): guía completa de monitoreo
Trabajo con archivos ZIP en Node.js: guía completa
Trabajo con Excel en TypeScript: bibliotecas, ejemplos y herramientas