Android CameraX 项目教程
android-cameraxCameraX aims to demonstrate how to use CameraX APIs written in Kotlin项目地址:https://gitcode.com/gh_mirrors/an/android-camerax
1. 项目的目录结构及介绍
android-camerax/
├── app/
│ ├── build.gradle
│ ├── src/
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── cameraxapp/
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── CameraXModule.kt
│ │ │ │ └── ...
│ │ │ └── res/
│ │ │ ├── layout/
│ │ │ │ └── activity_main.xml
│ │ │ ├── values/
│ │ │ │ └── strings.xml
│ │ │ └── ...
│ └── ...
├── build.gradle
├── settings.gradle
└── ...
目录结构介绍
- app/: 主应用程序模块。
- build.gradle: 应用程序模块的构建脚本。
- src/main/: 主要源代码和资源。
- AndroidManifest.xml: 应用程序的清单文件。
- java/com/example/cameraxapp/: Kotlin 源代码目录。
- MainActivity.kt: 主活动文件。
- CameraXModule.kt: CameraX 相关逻辑文件。
- res/: 资源文件目录。
- layout/activity_main.xml: 主活动的布局文件。
- values/strings.xml: 字符串资源文件。
2. 项目的启动文件介绍
MainActivity.kt
package com.example.cameraxapp
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageCapture
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import com.example.cameraxapp.databinding.ActivityMainBinding
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var imageCapture: ImageCapture
private lateinit var cameraExecutor: ExecutorService
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 初始化 ImageCapture 用例
imageCapture = ImageCapture.Builder().build()
// 启动相机
startCamera()
// 设置拍照按钮的点击事件
binding.captureButton.setOnClickListener { takePhoto() }
// 创建一个后台线程池
cameraExecutor = Executors.newSingleThreadExecutor()
}
private fun startCamera() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
// 获取 ProcessCameraProvider
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
// 创建 Preview 用例
val preview = Preview.Builder().build().also {
it.setSurfaceProvider(binding.viewFinder.surfaceProvider)
}
// 选择后置摄像头
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
try {
// 解绑所有用例
cameraProvider.unbindAll()
// 绑定用例到相机
cameraProvider.bindToLifecycle(
this, cameraSelector, preview, imageCapture
)
} catch (exc: Exception) {
// 处理异常
}
}, ContextCompat.getMainExecutor(this))
}
private fun takePhoto() {
// 拍照逻辑
}
override fun onDestroy() {
super.onDestroy()
// 关闭线程池
cameraExecutor.shutdown()
}
}
启动文件介绍
- MainActivity.kt: 主活动文件,负责初始化 CameraX 用例(如 Preview 和 Image
android-cameraxCameraX aims to demonstrate how to use CameraX APIs written in Kotlin项目地址:https://gitcode.com/gh_mirrors/an/android-camerax