在向应用添加预览时,请使用 PreviewView,这是一种可以剪裁、缩放和旋转以确保正确显示的 View。

当相机处于活动状态时,图片预览会流式传输到 PreviewView 中的 Surface。

使用 PreviewView

如需使用 PreviewView 实现 CameraX 预览,请按以下步骤操作(稍后将对这些步骤进行说明):

将 PreviewView 添加到布局。

在创建 View 时,请检查 ProcessCameraProvider。

选择相机并绑定生命周期和用例。

使用 PreviewView 存在一些限制。使用 PreviewView 时,您无法执行以下任何操作:

创建 SurfaceTexture,以在 TextureView 和 Preview.SurfaceProvider 上进行设置。

从 TextureView 检索 SurfaceTexture,并在 Preview.SurfaceProvider 上对其进行设置。

从 SurfaceView 获取 Surface,并在 Preview.SurfaceProvider 上对其进行设置。

如果出现上述任何一种情况,Preview 就会停止将帧流式传输到 PreviewView。

[可选] 配置 CameraXConfig.Provider

如果您希望对初始化 CameraX 的时间进行精细控制,您可以在 Application 类中实现 CameraXConfig.Provider 接口。请注意,大多数应用并不需要这种级别的控制。

Kotlin

import androidx.camera.camera2.Camera2Config

import androidx.camera.core.CameraXConfig

public class MyCameraXApplication : Application(), CameraXConfig.Provider {

override fun getCameraXConfig(): CameraXConfig {

return Camera2Config.defaultConfig()

}

}Java

import androidx.camera.camera2.Camera2Config;

import androidx.camera.core.CameraXConfig;

public class MyCameraXApplication extends Application implements CameraXConfig.Provider {

@NonNull

@Override

public CameraXConfig getCameraXConfig() {

return Camera2Config.defaultConfig();

}

}

将 PreviewView 添加到布局

以下示例显示了布局中的 PreviewView:

android:id="@+id/container">

android:id="@+id/previewView" />

请求 CameraProvider

以下代码展示了如何请求 CameraProvider:

Kotlin

import androidx.camera.lifecycle.ProcessCameraProvider

import com.google.common.util.concurrent.ListenableFuture

class MainActivity : AppCompatActivity() {

private lateinit var cameraProviderFuture : ListenableFuture

override fun onCreate(savedInstanceState: Bundle?) {

cameraProviderFuture = ProcessCameraProvider.getInstance(this)

}

}Java

import androidx.camera.lifecycle.ProcessCameraProvider

import com.google.common.util.concurrent.ListenableFuture

public class MainActivity extends AppCompatActivity {

private ListenableFuture cameraProviderFuture;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

cameraProviderFuture = ProcessCameraProvider.getInstance(this);

}

}

检查 CameraProvider 可用性

请求 CameraProvider 后,请验证它能否在视图创建后成功初始化。以下代码展示了如何执行此操作:

Kotlin

cameraProviderFuture.addListener(Runnable {

val cameraProvider = cameraProviderFuture.get()

bindPreview(cameraProvider)

}, ContextCompat.getMainExecutor(this))Java

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

如需查看此示例中使用的 bindPreview 函数的示例,请参阅下一部分中提供的代码。

选择相机并绑定生命周期和用例

创建并确认 CameraProvider 后,请执行以下操作:

创建 Preview。

指定所需的相机 LensFacing 选项。

将所选相机和任意用例绑定到生命周期。

将 Preview 连接到 PreviewView。

以下代码展示了一个示例:

Kotlin

fun bindPreview(cameraProvider : ProcessCameraProvider) {

var preview : Preview = Preview.Builder()

.build()

var cameraSelector : CameraSelector = CameraSelector.Builder()

.requireLensFacing(CameraSelector.LENS_FACING_BACK)

.build()

preview.setSurfaceProvider(previewView.getSurfaceProvider())

var camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview)

}Java

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

}

现在,您已完成实现相机预览的操作。请构建您的应用,然后确认预览是否出现在您的应用中并能按预期工作。

其他资源

如需详细了解 CameraX,请参阅下面列出的其他资源。

Codelab

代码示例

android实时预览,实现预览  |  Android 开发者  |  Android Developers相关推荐

  1. Android Studio自定义视图无法预览

    Android Studio自定义视图没有办法预览 我想大家应该都和我一样,如果看到布局的编码的时候如果右边能够非常直观地显示出对应的视图,心里会非常舒心,像官方提供的tools命名空间就是为了这个目 ...

  2. android 图片预览动画,Android实现仿Windows7图片预览窗格效果

    本实例将显示类似于windows7提供的图片预览窗格效果,单击任意一张图片,可以在右侧显示该图片的预览效果. 效果如图所示: 具体实现方法: res/layout/main.xml: android: ...

  3. android xml 预览,解决Android studio xml界面无法预览问题

    解决Android studio xml界面无法预览问题 发布时间:2020-10-05 18:48:37 来源:脚本之家 阅读:140 作者:张雨明 如下图 修改style.xml中的 parent ...

  4. android 摄像头比例,Android摄像头是全屏预览最简单的方式.doc

    Android摄像头是全屏预览最简单的方式 Android Camera做全屏预览之最简单方法 M厂开发五部:刘 博 一.全屏预览与非全屏预览的区别 对于大多数人来说,我们看电影.玩游戏等都喜欢全屏, ...

  5. android camera 全屏,Android Camera做全屏预览之最简单方法.doc

    Android Camera做全屏预览之最简单方法 M厂开发五部:刘 博 一.全屏预览与非全屏预览的区别 对于大多数人来说,我们看电影.玩游戏等都喜欢全屏,我们之所以喜欢全屏的一个主要原因就是全屏的感 ...

  6. Android摄像头 只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理 底层Surface

    [后注:]下载代码的注意,我的手机是4.3寸的屏,华为U9200.如果不能运行的请修改参数.看前文的第四条.Y的,省的说我传的代码不能用  最近一直在审视以前做过的东西,关于android摄像头预览, ...

  7. 如何不解锁BL刷入Android 12/安卓程序员预览版或者刷回Android 11

    教程参考的"如何不解锁BL使用adb sideload安装(刷入)android 12(安卓)程序员预览版1/DP1" 最近重新使用回了Pixel 5,前几天突然心血来潮想刷入An ...

  8. Android 视频 短视频录制预览尺寸(简单几款机型测试)

    Android 视频 短视频录制预览尺寸(简单几款机型测试) 贴出下列2表目的也是便于大家对一般相机照片和预览主流尺寸有个大概了解 SurfaceView 照片支持尺寸 Picture Nexus 5 ...

  9. 谷歌android p系统,一文尽览谷歌Android P预览版系统

    3月16日消息 要说今年谷歌I/O全球开发者大会上最引人注目的"主角",相信不少网友都会投Android 9.0(Android P)系统一票!按照以往的惯例,谷歌将在I/O全球开 ...

  10. 利用Gulp实现JSDoc 3的文档编写过程中的实时解析和效果预览

    ### 利用Gulp实现JSDoc 3的文档编写过程中的实时解析和效果预览 http://segmentfault.com/a/1190000002583569 转载于:https://www.cnb ...

最新文章

  1. heroku能用mysql吗_heroku连接到mysql数据库
  2. C# 什么是【事件驱动】
  3. python在文本添加超链接_Python将超链接文本打印到Spyder控制台(Python print hyperlinked text to Spyder Console)...
  4. Java8新特性总结 - 3. Lambda表达式
  5. linux怎么快速输入括弧,中括号怎么打-linux运维:shell脚本中花括号的使用技巧...
  6. 双屏怎么快速切换鼠标_双屏触摸一体机功能特点解析
  7. html编辑器全角 半角转换,javascript实现全角与半角字符的转换
  8. 批量打印Word文档并记录(一)
  9. 高速公路上边有没有人脸识别摄像头_人脸识别特征介绍以及难题概括
  10. ad7705c语言程序,基于51单片机的的AD7705的运用
  11. 读取cpu温度的api_读取CPU核心温度
  12. mysql误删除恢复
  13. 解决Google Earth谷歌地球无法连接服务器问题
  14. unraid应用_套娃自动备份unraid系统u盘_NAS存储
  15. 【总结】GitHub的使用
  16. 访问www.baidu.com的过程
  17. 小黄人这步棋,vivo怎么下?
  18. 用Python操作文件
  19. ListControl控件绘制网格线
  20. Fatal Python error: Segmentation fault

热门文章

  1. 一个完整的Windows驱动程序示例(应用与内核通信)
  2. kubernetes cordon原理
  3. (完整版)英语常用词组大全(2000词以上)
  4. Arduino 实现物理非自锁按键触发变为软件上自锁状态保持控制方法
  5. java写的网络版斗地主_用java实现斗地主
  6. 4、Reading Rasa Source Code —— Domain 解析
  7. Webstorm使用解决ESlint问题合集
  8. 1044 Shopping in Mars(柳神39行代码+详细注释)
  9. 网络路由交换 -- 静态路由 和 缺省路由
  10. 查看当前系统 jave 版本 ,Eclipse版本