0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

轻松实现相机预览 | Camera Viewfinder 全新上线

谷歌开发者 来源:未知 2023-02-20 20:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者 / Android 开发者关系工程师 Francesco Romano


经过多年的不断发展,Android 设备现在具有各种尺寸和形状,并且屏幕大小和功能也大不相同。但无论如何变化,手机拍照从一开始便一直是 Android 设备最重要的使用场景之一。如今,相机功能仍然是消费者购买手机的首要考虑因素之一。

作为开发者,您希望在您的应用中利用相机功能,因此决定采用 Android 相机框架。首先要实现的是预览 (Preview) 用例,它会在屏幕上显示相机传感器的输出。
  • 预览 (Preview)

    https://developer.android.google.cn/training/camerax/preview


接下来,您可以使用与屏幕尺寸一样大的界面创建 CaptureSession。只要屏幕的宽高比与相机传感器输出的宽高比相同,并且设备保持自然的纵向方向,那么一切便能顺利进行。


  • CaptureSession

    https://developer.android.google.cn/reference/android/hardware/camera2/CameraDevice#createCaptureSession(android.hardware.camera2.params.SessionConfiguration)


但是,当您调整窗口大小、展开设备、更改屏幕或改变方向时会发生什么呢?大多数情况下,预览画面可能会被拉伸、上下颠倒或错误地旋转。如果处于多窗口模式中,您的应用甚至可能会崩溃。

为什么会出现这种情况呢?因为您在创建 CaptureSession 时做了隐含假设。

过去,应用在其整个生命周期中可能一直会在同一个窗口中运行,但是,随着新的外形规格 (例如可折叠设备) 和新的显示模式 (例如多窗口模式和多屏幕模式) 面市,这种情况已经发生变化。

让我们具体了解一下在开发针对各种外形规格的应用时需要考虑的一些重要因素,以及要避免的一些常见陷阱:
  • 不要假定应用将一直在纵向窗口中运行。Android 13 仍然支持应用固定屏幕方向的请求,但现在设备制造商可以选择覆盖应用的首选屏幕方向请求。

  • 不要假定应用有任何固定尺寸或宽高比。即使您设置了 resizableActivity = "false",您的应用仍然可以在大屏幕设备 (>=600dp) 上以多窗口模式使用。

  • 不要假定屏幕方向和相机方向之间存在固定关系。《Android 兼容性定义文档》中明确了相机图像传感器 "必须朝向正确方向,以便相机的长度方向与屏幕的长度方向对齐"从 API 级别 32 开始,查询可折叠设备方向的相机客户端可以收到一个根据设备/折叠状态动态变化的值。


  • Android 兼容性定义文档

    https://source.android.com/docs/compatibility/13/android-13-cdd#755_camera_orientation


  • 不要假定边衬区的大小无法更改。新的任务栏会作为边衬区报告给应用,且当任务栏与手势导航一起使用时,任务栏可以动态隐藏和显示。


  • 不要假定您的应用享有专属的相机访问权限。当您的应用处于多窗口模式时,其他应用也可以获得对相机和麦克风等共享资源的访问权限。


虽然 CameraX 已经能处理上述大多数情况,但使用 Camera2 API 实现适用于不同场景的预览可能会很复杂。我们在 "在您的相机应用中支持可调整大小的 Surface" Codelab 中介绍了这一点。


  • 在您的相机应用中支持可调整大小的 Surface

    https://developer.android.google.cn/codelabs/android-camera2-preview


如果有一个简单的组件可以处理这些细节,并让您专注于特定的应用逻辑,会不会更好?

话不多说,敬请通过下文了解 CameraViewfinder……



隆重推出 CameraViewfinder


CameraViewfinderJetpack 库的一个新组件,帮助您更轻松地快速实现相机预览。它在内部使用 TextureView 或 SurfaceView 来显示相机画面,并对其应用进行必要的转换以正确显示取景器。比如校正宽高比、比例和旋转方向。它与您现有的 Camera2 代码库完全兼容,并已在多种设备上持续进行测试。

  • CameraViewfinder

    https://developer.android.google.cn/reference/kotlin/androidx/camera/viewfinder/CameraViewfinder


下面就让我们对其用法一探究竟!

首先,在您的应用级 build.gradle 文件中添加依赖项:
implementation "androidx.camera:camera-viewfinder:1.3.0-alpha01"


同步您的项目。现在,您应该可以像使用任何其他 View 一样直接使用 CameraViewfinder。例如,您可以将它添加到您的布局文件中:
<androidx.camera.viewfinder.CameraViewfinder
android:id="@+id/view_finder"
app:scaleType="fitCenter"
app:implementationMode="performance"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

  • View

    https://developer.android.google.cn/reference/android/view/View


如您所见,CameraViewfinder 的控件与 PreviewView 上可用的控件相同,所以您可以选择不同的实现模式缩放类型


  • PreviewView

    https://developer.android.google.cn/reference/kotlin/androidx/camera/view/PreviewView

  • 实现模式

    https://developer.android.google.cn/training/camerax/preview#implementation-mode

  • 缩放类型

    https://developer.android.google.cn/training/camerax/preview#scale-type


现在该组件是布局的一部分,您仍然可以创建 CameraCaptureSession,但不提供 TextureView 或 SurfaceView 作为目标界面,而是使用 requestSurfaceAsync() 的结果。

fun startCamera(){
val previewResolution = Size(width, height)
val viewfinderSurfaceRequest =
ViewfinderSurfaceRequest(previewResolution, characteristics)
val surfaceListenableFuture =
cameraViewfinder.requestSurfaceAsync(viewfinderSurfaceRequest)


Futures.addCallback(surfaceListenableFuture, object :FutureCallback {
override fun onSuccess(surface:Surface) {
//像往常一样使用这个界面创建 CaptureSession
}
override fun onFailure(t:Throwable) { /* 出错了 */}
}, ContextCompat.getMainExecutor(context))
}


  • CameraCaptureSession
    https://developer.android.google.cn/reference/android/hardware/camera2/CameraCaptureSession
  • requestSurfaceAsync()

    https://developer.android.google.cn/reference/kotlin/androidx/camera/viewfinder/CameraViewfinder#requestSurfaceAsync(androidx.camera.viewfinder.ViewfinderSurfaceRequest)



附加功能: 可折叠设备的布局优化


CameraViewFinder 随时可以在可调整大小的界面、配置更改、旋转和多窗口模式下使用,并且已经在许多可折叠设备上进行了测试。

但是,如果您想为可折叠设备和双屏设备实施布局优化,您可以将 CameraViewFinder 与 Jetpack WindowManager 库结合使用,从而为您的用户提供独特的体验。

  • Jetpack WindowManager

    https://developer.android.google.cn/jetpack/androidx/releases/window


例如,如果屏幕中间有铰链,或者设备处于 "书本" 或 "桌面" 模式,您可以选择不显示全屏预览。在这种情况下,您可以将取景器放在屏幕的一部分中,然后将控件放在另一侧;或者您可以使用屏幕的一部分来显示最后拍摄的照片。尽情发挥您的创意吧!

示例应用已经针对可折叠设备进行了优化,您可以立即查看处理姿势变化的代码。欢迎您持续关注我们,及时了解更多开发技术和产品更新等资讯动态。


  • 处理姿势变化的代码

    https://github.com/androidx/androidx/blob/androidx-main/camera/integration-tests/viewfindertestapp/src/main/java/androidx/camera/integration/viewfinder/CameraViewfinderFoldableFragment.kt#L583




 点击屏末||即刻了解 CameraViewfinder 更多相关信息




原文标题:轻松实现相机预览 | Camera Viewfinder 全新上线

文章出处:【微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 谷歌
    +关注

    关注

    27

    文章

    6257

    浏览量

    111945

原文标题:轻松实现相机预览 | Camera Viewfinder 全新上线

文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    展会邀请 | 51camera诚邀您相约2026上海机器视觉展

    2026上海机器视觉展将于3月25日至27日在上海新国际博览中心隆重举办,51camera志强视觉将携众多产品亮相该展会。诚挚邀请大家莅临51camera展位W4馆4558观展交流。51camera
    的头像 发表于 03-06 17:57 255次阅读
    展会邀请 | 51<b class='flag-5'>camera</b>诚邀您相约2026上海机器视觉展

    Camera应用旋转预览拉伸Bug:RK3588+Android 12环境下的复现、分析与临时解决方案

    在移动设备 Camera 应用开发中,预览画面稳定性直接影响用户拍摄体验。近期我们在RK3588 芯片平台 + Android 12 系统环境下调试时,发现 Camera2 应用存在高概率预览
    的头像 发表于 02-04 16:17 422次阅读
    <b class='flag-5'>Camera</b>应用旋转<b class='flag-5'>预览</b>拉伸Bug:RK3588+Android 12环境下的复现、分析与临时解决方案

    索尼更新相机遥控软件开发包2.01版本

    2026年2月03日,索尼(中国)有限公司正式发布了可通过电脑远程操控索尼相机相机遥控软件开发包(Camera Remote SDK)2.01版本,本次更新带来了2个新功能,新增支持机型ILCE-7M5、PXW-Z380、DS
    的头像 发表于 02-03 16:59 821次阅读

    月之暗面全新开源旗舰模型Kimi K2.5上线模力方舟

    模力方舟平台现已上线来自月之暗面(Moonshot AI)发布的全新开源旗舰模型Kimi K2.5。
    的头像 发表于 01-29 10:20 1201次阅读
    月之暗面<b class='flag-5'>全新</b>开源旗舰模型Kimi K2.5<b class='flag-5'>上线</b>模力方舟

    恩智浦嵌入式HMI应用开发工具GUI Guider 1.10.1全新上线

    恩智浦嵌入式HMI应用开发工具GUI Guider 1.10.1全新上线啦!新版本重点聚焦性能提升、工具链升级、多点触控体验以及开发板适配,进一步优化IDE界面,增强功能稳定性,并完善文档体系。
    的头像 发表于 12-28 09:45 1921次阅读

    黑白相机与彩色相机的成像优势分析以及常见的误区说明

    黑白相机与彩色相机的应用区别,简单来说就是定性定量分析与绚烂图案采集的应用区别。 一,彩色相机的成像核心 1974年,柯达公司的工程师Bryce Bayer提出了一个全新方案,在图像传
    的头像 发表于 12-19 06:43 659次阅读
    黑白<b class='flag-5'>相机</b>与彩色<b class='flag-5'>相机</b>的成像优势分析以及常见的误区说明

    Camera Link 信号源板卡学习资料第153篇: 基于Sprtan6的Full(Base) Camera Link 信号源

    , , Camera Link转光纤, Camera Link 信号源
    的头像 发表于 12-08 11:43 600次阅读
    <b class='flag-5'>Camera</b> Link 信号源板卡学习资料第153篇: 基于Sprtan6的Full(Base) <b class='flag-5'>Camera</b> Link 信号源

    OpenAI Sora 2模型上线微软Azure AI Foundry国际版

    我们非常激动地宣布,OpenAI 的新一代多模态视频生成模型 Sora 2 现已在 Azure AI Foundry(国际版)上线,进入公共预览阶段。
    的头像 发表于 10-22 09:44 947次阅读
    OpenAI Sora 2模型<b class='flag-5'>上线</b>微软Azure AI Foundry国际版

    重磅发布 | 深视智能全新背照式制冷sCMOS相机上市,突破灵敏度和噪声极限

    全新产品发布:sCMOS相机科学相机是研究和实验领域的重要的成像组成部分。这些相机采用sCMOS(科学互补金属氧化物半导体)图像传感器,有助于确保获得最高质量和最准确的图像。在诸多对成
    的头像 发表于 10-20 08:17 1185次阅读
    重磅发布 | 深视智能<b class='flag-5'>全新</b>背照式制冷sCMOS<b class='flag-5'>相机</b>上市,突破灵敏度和噪声极限

    如何利用Trace机制实现LLCP预览功能

    在蓝牙协议栈开发过程中,有时需要预先知道 LLCP。本文将介绍如何利用 Trace 机制实现 LLCP 预览功能。
    的头像 发表于 10-09 17:55 2072次阅读

    探秘51camera自研高亮频闪灯、信号模块及信号控制器的魅力!

    51camera的机器视觉光源、信号扩展转换模块及信号同步控制器轻松解决拖影问题、克服信号不同步困难。
    的头像 发表于 09-19 17:35 975次阅读
    探秘51<b class='flag-5'>camera</b>自研高亮频闪灯、信号模块及信号控制器的魅力!

    Zivid3D相机安装使用教程

    Zivid3D相机小巧便携,重量轻,分辨率高,速度快,适合高反光透明物体。本文介绍Zivid 3D相机的操作流程,帮助用户掌握其功能。从硬件连接、软件安装到参数设置,重点涵盖点云生成、预览及数据导出等关键步骤,并提供优化拍摄效果
    的头像 发表于 08-26 15:34 774次阅读
    Zivid3D<b class='flag-5'>相机</b>安装使用教程

    工业相机基本知识解读:像元、帧率、数据接口等--51camera

    工业相机(Industrial Camera)是一种专门为工业自动化和机器视觉应用而设计的成像设备,它不同于消费类相机(如手机、单反),主要追求的是成像稳定性、长时间可靠性、实时性和精确性。它通常与镜头、光源、图像采集卡、图像处
    的头像 发表于 08-19 17:25 1701次阅读
    工业<b class='flag-5'>相机</b>基本知识解读:像元、帧率、数据接口等--51<b class='flag-5'>camera</b>

    相机模组胶水检测

    相机
    海伯森技术
    发布于 :2025年05月19日 15:07:45

    如何提高uvc相机的清晰度?

    在使用小核的uvc例程时,修改了编码的分辨率设置为2592x1944,通过uvc连接到相机时看到的画面比较模糊,如何提高清晰度呢? 配置如下所示左边为大核编码,右边为uvc配置 下面是canaan-camera.sh新增的分辨率 下面是uvc下2592*1944的图片
    发表于 04-28 06:33