網站首頁 編程語言 正文
引入依賴
下面,就使用該庫來打造一個簡單的相機應用吧~
首先引入依賴
? ? def camerax_version = "1.1.0-beta03"
? ? 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-video:${camerax_version}"
? ? implementation "androidx.camera:camera-view:${camerax_version}"
? ? implementation "androidx.camera:camera-extensions:${camerax_version}"
預覽
將 PreviewView 添加到布局中
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.camera.view.PreviewView android:id="@+id/previewView" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:id="@+id/take" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="拍照" /> </RelativeLayout>
獲取 cameraProvider
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
bindViewAndLifecycle(cameraProvider)
}, ContextCompat.getMainExecutor(this))
配置 ImageCapture
private val imageCapture: ImageCapture by lazy {
ImageCapture.Builder().build()
}
bindViewAndLifecycle:綁定視圖和Lifecycle
private fun bindViewAndLifecycle(cameraProvider: ProcessCameraProvider) {
val previewView = findViewById<PreviewView>(R.id.previewView)
val cameraSelector = CameraSelector.Builder()
//如果是前置,可使用CameraSelector.LENS_FACING_FRONT
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
val preview = Preview.Builder().build()
preview.setSurfaceProvider(previewView.surfaceProvider)
cameraProvider.bindToLifecycle(
this as LifecycleOwner,
cameraSelector,
imageCapture,
preview
)
}
這樣,就完成了相機的預覽功能了。
拍攝
實現拍照功能也很簡單,只需要創建文件,然后調用imageCapture的takePicture方法。
private fun takePicture() {
val path =
getExternalFilesDir(null)?.absolutePath + File.separator + System.currentTimeMillis() + ".jpg"
val photoFile = File(path)
if (!photoFile.exists()) {
photoFile.createNewFile()
}
val fileOptions = ImageCapture.OutputFileOptions.Builder(photoFile).build()
imageCapture.takePicture(
fileOptions,
ContextCompat.getMainExecutor(this),
object : ImageCapture.OnImageSavedCallback {
override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
Toast.makeText(this@MainActivity, "保存成功", Toast.LENGTH_SHORT).show()
}
override fun onError(exception: ImageCaptureException) {
Log.e(tag, "onError message:${exception.message}")
}
})
}
點擊按鈕時調用此方法即可
findViewById<Button>(R.id.take).setOnClickListener {
takePicture()
}
注意:作為相機應用,可別忘了申請CAMERA權限哦。
這樣,一個簡單的相機應用就完成啦~
原文鏈接:https://blog.csdn.net/qq_45485851/article/details/124289947
相關推薦
- 2024-03-28 存儲過程整合springboot
- 2022-07-30 react中受控組件與非受控組件
- 2022-06-19 介紹C語言程序中的注釋等輔助語句如何使用_C 語言
- 2022-03-21 導出與導入Docker的容器實現示例_docker
- 2023-11-18 數據處理使用Python提取String、字符串中的數字
- 2022-03-16 C程序中Ubuntu、stm32的內存分配問題_C 語言
- 2022-04-01 OpenCV實現簡單套索工具_C 語言
- 2022-09-22 模擬實現vector
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支