当前位置: 主页 > 建站知识 > 软件开发

安卓软件开发学习-0基础学习安卓开发

发布时间:2023-03-09 22:01   浏览次数:次   作者:佚名

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 29 天,点击查看活动详情

前言

PreviewView是属于CameraX组件的内容,也是我们的Jetpack库中的组件内容,我们可以用PreviewView去实现预览我们的相机画面。

正文

为什么使用CameraX?

这点官方已经告诉了我们:

image.png

接下来我们将使用它的预览视图PreviewView,看看它的效果

image.png

我们用Kotlin语言开发,因为用到摄像头,所以需要摄像头权限,首先就需要去把我们的摄像头权限注册到清单文件:

image.png

代码如下:

<uses-permission android:name="android.permission.CAMERA"/>
复制代码

以及需要在setting.gradle文件中加入我们的google()(有些创建项目模式自带):

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()

安卓软件 英语口语学习 比较好的_0基础学习安卓开发_安卓软件开发学习

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):

安卓软件开发学习_安卓软件 英语口语学习 比较好的_0基础学习安卓开发

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'
}
复制代码

安卓软件 英语口语学习 比较好的_安卓软件开发学习_0基础学习安卓开发

版本用最新的即可。

看了官方的说明,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)

0基础学习安卓开发_安卓软件开发学习_安卓软件 英语口语学习 比较好的

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()

安卓软件开发学习_安卓软件 英语口语学习 比较好的_0基础学习安卓开发

//创建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) } 复制代码

运行程序,我们就能得到下面的效果:

微信图片_20230304232526.jpg

可以看到我们成功的将后置摄像机镜头画面预览在我们的app页面上。

总结

其实CameraX的功能很多,从拍照到视频都能自定义,甚至还能指定镜头数量,有空可以多看看使用的方法,后面再出一篇。