CameraX for Kotlin:完整指南及示例
\n\n1. 什么是 CameraX 以及为什么需要它
\nCameraX 是 Google 为 Android 相机开发而设计的库,使用 Kotlin 和 Java 编写。它提供了一个简单且一致的 API 来处理相机操作,抽象了底层 Camera2 API 的复杂性。CameraX 解决了开发者面临的许多问题:支持不同 Android 版本、适配各种设备制造商、处理 Activity/Fragment 生命周期以及屏幕旋转。
\n为什么需要 CameraX?首先,它极大地简化了开发:无需编写数百行代码来配置相机、预览和图像捕获,只需编写 10-20 行代码。其次,它确保与 Android 5.0(API 21)及以上版本的设备兼容。第三,CameraX 自动处理复杂场景,例如切换相机、更改方向以及在屏幕旋转时保存状态。第四,该库包含内置扩展(Extensions),例如 HDR、夜间模式和肖像模式,这些扩展在大多数设备上无需额外配置即可使用。
\nCameraX 非常适合需要快速集成相机的应用程序:即时通讯软件、社交网络、二维码扫描应用、视频通话应用以及简易相机。如果您需要创建对每一帧都有完全控制权的专业应用(例如用于计算机视觉或专业视频拍摄),可能需要考虑 Camera2,但对于 90% 的任务来说,CameraX 是最佳选择。
\n\n2. 安装
\nCameraX 通过 Gradle 构建系统安装。对于 Kotlin 项目,请在 build.gradle(Module: app)文件中添加依赖项。
精确命令 (Gradle):
\ndependencies {\n // Core CameraX\n def camerax_version = "1.3.1"\n implementation "androidx.camera:camera-core:${camerax_version}"\n implementation "androidx.camera:camera-camera2:${camerax_version}"\n implementation "androidx.camera:camera-lifecycle:${camerax_version}"\n implementation "androidx.camera:camera-view:${camerax_version}"\n\n // 如果需要扩展(HDR、夜间模式等)\n implementation "androidx.camera:camera-extensions:${camerax_version}"\n\n // 用于视频\n implementation "androidx.camera:camera-video:${camerax_version}"\n}\n 同时确保在 build.gradle(Project)中指定了 Google 仓库:
allprojects {\n repositories {\n google()\n mavenCentral()\n }\n}\n 添加依赖项后,同步项目(Sync Now)。
\n\n3. 快速入门——最小工作示例
\n创建一个新的 Activity 或 Fragment。在布局(XML)中添加 PreviewView:
<?xml version="1.0" encoding="utf-8"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n xmlns:android="http://schemas.android.com/apk/res/android"\n android:layout_width="match_parent"\n android:layout_height="match_parent">\n\n <androidx.camera.view.PreviewView\n android:id="@+id/viewFinder"\n android:layout_width="match_parent"\n android:layout_height="match_parent" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n\n 现在是用 Kotlin 编写的 Activity 代码:
\nimport android.os.Bundle\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.camera.core.CameraSelector\nimport androidx.camera.core.Preview\nimport androidx.camera.lifecycle.ProcessCameraProvider\nimport androidx.core.content.ContextCompat\nimport java.util.concurrent.ExecutorService\nimport java.util.concurrent.Executors\n\nclass MainActivity : AppCo