安卓软件开发学习-0基础学习安卓开发
开启掘金成长之旅!这是我参与「掘金日新计划 · 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
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的功能很多,从拍照到视频都能自定义,甚至还能指定镜头数量,有空可以多看看使用的方法,后面再出一篇。