开启成长之旅!这是我参加「日新计划 2 月更文应战」的第 29 天,点击检查活动概况
前言
PreviewView是归于CameraX组件的内容,也是咱们的Jetpack库中的组件内容,咱们可以用PreviewView去实现预览咱们的相机画面。
正文
为什么运用CameraX?
这点官方现已告诉了咱们:
接下来咱们将运用它的预览视图PreviewView,看看它的作用。
咱们用Kotlin言语开发,由于用到摄像头,所以需求摄像头权限,首要就需求去把咱们的摄像头权限注册到清单文件:
代码如下:
<uses-permission android:name="android.permission.CAMERA"/>
以及需求在setting.gradle文件中参加咱们的google()(有些创立项目形式自带):
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
接着咱们在app目录的build.gradle文件中的android块中参加下面代码(有些创立项目形式自带):
android {
....
....
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
接着把咱们需求的CameraX依赖导入咱们模块里(这儿是app/build.gradle):
dependencies {
....
// The following line is optional, as the core library is included indirectly by camera-camera2
implementation 'androidx.camera:camera-core:1.3.0-alpha04'
implementation 'androidx.camera:camera-camera2:1.3.0-alpha04'
// If you want to additionally use the CameraX Lifecycle library
implementation 'androidx.camera:camera-lifecycle:1.3.0-alpha04'
// If you want to additionally use the CameraX VideoCapture library
implementation 'androidx.camera:camera-video:1.3.0-alpha04'
// If you want to additionally use the CameraX View class
implementation 'androidx.camera:camera-view:1.3.0-alpha04'
// If you want to additionally add CameraX ML Kit Vision Integration
implementation 'androidx.camera:camera-mlkit-vision:1.3.0-alpha04'
// If you want to additionally use the CameraX Extensions library
implementation 'androidx.camera:camera-extensions:1.3.0-alpha04'
}
版别用最新的即可。
看了官方的说明,CameraX的功用太丰富了,有空还得仔细看,言归正传,咱们回到 PreviewView上,接下来咱们把布局给安置好:
<FrameLayout
android:id="@+id/container"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
然后在Activity中构建相应代码与装备:
第一步恳求CameraProvider:
private lateinit var cameraProviderFuture : ListenableFuture<ProcessCameraProvider>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
....
....
//恳求CameraProvider
cameraProviderFuture = ProcessCameraProvider.getInstance(this)
}
接着咱们去动态恳求摄像机权限(这块代码咱们下一篇聊,这儿咱们先在app的设置权限里给相机权限授权运用中允许),然后去添加CameraProvider监听去创立预览
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
bindPreview(cameraProvider)
}, ContextCompat.getMainExecutor(this))
咱们用bindPreview()方法创立预览和相关装备与绑定流程:
private fun bindPreview(cameraProvider : ProcessCameraProvider) {
val imageCapture = ImageCapture.Builder().build()
//创立preview
val preview : Preview = Preview.Builder()
.build()
//创立装备
val cameraSelector : CameraSelector = CameraSelector.Builder()
//后置相机(指定镜头)
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
//preview绑定previewView
preview.setSurfaceProvider(binding.previewView.surfaceProvider)
//将选择的相机和装备用例与生命周期绑定
cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview, imageCapture)
}
运行程序,咱们就能得到下面的作用:
可以看到咱们成功的将后置摄像机镜头画面预览在咱们的app页面上。
总结
其实CameraX的功用很多,从拍照到视频都能自定义,甚至还能指定镜头数量,有空可以多看看运用的方法,后面再出一篇。