CameraX 是一个 Jetpack 库,旨在帮助您更轻松地开发相机应用。 对于新应用,我们建议从 CameraX 开始。它提供一致且易于使用的 API,适用于绝大多数 Android 设备,并向后兼容 Android 5.0(API 级别 21)。

CameraX 支持大多数常见的相机用例:
  • 预览:在屏幕上查看图片。
  • 图片分析:无缝访问缓冲区中的图片以便在算法中使用,例如将其传递到机器学习套件。
  • 图片拍摄:保存图片。
  • 视频拍摄:保存视频和音频。

这篇文章讲的是 – 实现预览

在向应用添加预览时,请使用 PreviewView,这是一种可以剪裁、缩放和旋转以确保正确显示的 View。
当相机处于活动状态时,图片预览会流式传输到 PreviewView 中的 Surface。

效果图

配置:

  • 注意:CameraX 支持的最小SDK版本是21
  • 一、添加权限

1、清单文件中加入相机权限

<uses-permission android:name="android.permission.CAMERA" />

2、动态获取相机权限

  if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {requestPermissions(new String[]{Manifest.permission.CAMERA}, 11);}} else {//启动相机 }
  • 二、在build.gradle中 添加CameraX依赖
    implementation "androidx.camera:camera-core:1.1.0-alpha10"
// CameraX Camera2 extensions[可选]拓展库可实现人像、HDR、夜间和美颜、滤镜但依赖于OEMimplementation "androidx.camera:camera-camera2:1.1.0-alpha10"
// CameraX Lifecycle library[可选]避免手动在生命周期释放和销毁数据implementation "androidx.camera:camera-lifecycle:1.1.0-alpha10"
// CameraX View class[可选]最佳实践,最好用里面的PreviewView,它会自行判断用SurfaceView还是TextureView来实现implementation 'androidx.camera:camera-view:1.0.0-alpha23'

使用 PreviewView案例步骤:

1、(可选)配置 CameraXConfig.Provider。
2、 将 PreviewView 添加到布局。
3、 请求 ProcessCameraProvider。
4、 在创建 View 时,请检查 ProcessCameraProvider。
5、 选择相机并绑定生命周期和用例。

  • 将 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"><FrameLayoutandroid:layout_centerInParent="true"android:layout_width="500dp"android:layout_height="500dp"><androidx.camera.view.PreviewViewandroid:id="@+id/previewView"android:layout_width="match_parent"android:layout_height="match_parent"/></FrameLayout>
</RelativeLayout>
  • 步骤3、4、5、的处理
package com.example.myapplication;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.Camera;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.Preview;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.camera.view.PreviewView;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.LifecycleOwner;import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.concurrent.ExecutionException;public class MainActivity extends AppCompatActivity {private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;private PreviewView previewView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);previewView=findViewById(R.id.previewView);//初始化if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {requestPermissions(new String[]{Manifest.permission.CAMERA}, 11);}} else {//启动相机startCamera();}}private void startCamera() {// 请求 CameraProvidercameraProviderFuture = ProcessCameraProvider.getInstance(this);//检查 CameraProvider 可用性,验证它能否在视图创建后成功初始化cameraProviderFuture.addListener(() -> {try {ProcessCameraProvider cameraProvider = cameraProviderFuture.get();bindPreview(cameraProvider);} catch (ExecutionException | InterruptedException e) {// No errors need to be handled for this Future.// This should never be reached.}}, ContextCompat.getMainExecutor(this));}//选择相机并绑定生命周期和用例private void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {Preview preview = new Preview.Builder().build();CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build();preview.setSurfaceProvider(previewView.getSurfaceProvider());Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner)this, cameraSelector, preview);}
}
  • 到bindPreview这一步,相机预览已经显示,请查验

Android 实现相机(Camera)预览相关推荐

  1. android平台下OpenGL ES 3.0使用GLSurfaceView对相机Camera预览实时处理

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  2. 【流媒體】Android 实时视频采集—Camera预览采集

    [流媒體]Android 实时视频采集-Cameara预览采集 SkySeraph Mar 26th 2012  SZ Email:skyseraph00@163.com 更多精彩请直接访问SkySe ...

  3. Android 休眠状态对Camera预览的影响

    http://blog.csdn.net/sevensundark/article/details/7433177 最近遇到的一个问题,app中有照相功能的预览画面,提供照相功能,在此画面打开的前提下 ...

  4. Android camera预览流程

    前面已经简单介绍了,在Android系统中open camera的流程,但是,它又是怎么预览.怎么配置流,如何最终操作到camera HAL的呢.接下来以android原生相机应用,android9, ...

  5. Android Camera预览角度和拍照保存图片角度学习

    1 Camera预览角度处理 开发Camera过程中会遇到Camera拍照,获取照片后可以上传照片或者展示给用户. Camera的图像数据来源于摄像头硬件的图像传感器,这个图像传感器被固定到手机上后会 ...

  6. android 使用 surfaceView 获取 camera 预览界面图像数据

    在android中,通过相机获取预览界面的需求似乎很变态,好像也没有什么使用场景.但是,有一个场景需要获取预览界面的图像,就是扫码,比如微信,支付宝的扫一扫,就是需要获取预览界面的图像数据的. 实现逻 ...

  7. android l camera no panorama,camera预览是闪退的有关问题

    camera预览是闪退的问题 使用ov8825 sensor时,如果是摄像预览可以点亮,如果切换到拍照预览时,apk闪退.log如下: root@rk3288:/ # logcat logcat -- ...

  8. android camera移动方向_Android Camera开发系列:调整Camera预览方向

    有时候我们想根据自己的需要调整下Camera的预览方向,那么是调用哪个API可以达到我们的目的呢? 我们看下下图拍的几张小可爱的照片,分别是正常方向.旋转180度.90度拍的照片. ​ 正常方向 旋转 ...

  9. android camera surfaceview 变形,使用Camera预览显示变形问题

    本人使用Camera显示预览图竖屏显示会有一些拉伸.感觉被拉长了. 本人已经选择了最接近的比例了,但是还是有拉伸. package com.example.zxing_android; import  ...

  10. android预览界面显示不全,Android SurfaceView Camera 预览显示不全(画面拉伸)

    释放双眼,带上耳机,听听看~! 项目当中遇到调整摄像头位置需要全屏显示摄像头预览界面,过程中发现预览界面存在无法显示全,画面被拉伸的问题.surfaceview的宽高比可能与camera设置的宽高比不 ...

最新文章

  1. Mybatis自定义排序
  2. R语言ggplot2可视化按照因子排序(order of facets)可视化分组多子图(facet、面图)实战
  3. 让神经网络给符号AI“打工”,MIT和IBM联合解决深度学习痛点,未来将用于自动驾驶...
  4. 软件工程的实践项目的自我目标
  5. 奠定现代计算机发展的人物和思想,计算机基础第一部分.ppt
  6. Linux内核开发函数详解
  7. [Issue Fixed]-分卷压缩解压:gzip: stdin: not in gzip format
  8. 用户接口(User exit)
  9. VTK:Utilities之ShepardMethod
  10. (一)Git学习记录(不断更新)
  11. 《计量经济学》学习笔记之放宽基本假定的模型
  12. Oracle dbms_random随机函数包
  13. spring 源码下载地址
  14. Apache服务器全局配置之服务器标识配置篇
  15. [渝粤教育] 广东-国家-开放大学 21秋期末考试物权法10774k1
  16. 安卓版的水经注地图_水经注万能地图下载器
  17. c语言贪吃蛇(简易版本含完整代码)
  18. 2020MPAcc,管理类联考网课,书籍资源推荐!
  19. 详解KVM虚拟化原理
  20. android音频格式,适用于iOS和Android的音频格式

热门文章

  1. 本科毕业设计-软件工程-汽车销售客户关系管理系统
  2. 高德地图android 测试,平行路检测-专业导航-开发指南-Android 导航SDK | 高德地图API...
  3. html js个人信息录入,用户基本信息录入.html
  4. 递归算法(兔子产仔问题)
  5. Nginx 请求处理拾遗
  6. android home按键拦截
  7. 以存储为支点 探寻如何撬动Web3.0时代
  8. 郑州大学“战疫杯”大学生程序设计在线邀请赛(5)(C++题解+详细思路)2022年5月13日
  9. s13day1第一堂课
  10. expect中文版手册