JoeDevCamera 扩展
在布局组件中直接显示相机预览,用积木控制拍照和录制视频,无需打开系统相机应用。
下载
joejsanz.joedevcamera.aix(v1.0)
Camera.aia - 原作者示例项目
基本信息
- 版本:
v1.0(本站分发版本) - 发布时间:
2025-09-04 - JDK:
11 - 最低 API 级别:
21 - 构建方式:
FAST-CLI v4.3.1
截图
宽高比 1:1

宽高比 3:4

宽高比 9:16

全屏

原作者提示:把布局的高度设为 70%,可以得到更标准的相机尺寸;作者还计划提供单独的扩展,自动实现 1:1、3:4、9:16 的宽高比。
权限要求
初始化时必须授予以下权限:


方法
- StartCamera启动相机(布局)
- 启动相机并在布局中显示预览。
- 布局:要在其中显示相机预览的布局组件
- StopCamera停止相机()
- 停止相机并释放资源。
- SwitchCamera切换摄像头()
- 在前置和后置摄像头之间切换。
- TakePicture拍照()
- 拍摄照片并自动保存。
- SetZoomLevel设置缩放级别(级别)
- 调整缩放级别(1-10)。也可以不使用此方法,直接在屏幕上双指捏合进行缩放。
- GetZoomLevel获取缩放级别()
- 获取当前缩放级别。
- GetMaxZoomLevel获取最大缩放级别()
- 获取可用的最大缩放值。
- FocusOnPoint对焦到指定点(x,y)
- 对屏幕上的指定点对焦(x、y 取 0 到 1 之间)。
- CaptureAndGetPath拍照并获取路径()
- 拍摄一张照片并返回文件路径。
- StartRecording开始录像()
- 开始录制视频。
- StopRecording停止录像()
- 停止录制视频。
- IsCameraActive相机是否已启动()
- 检查相机是否处于启动状态。
- CameraResolution获取相机分辨率()
- 获取当前相机分辨率。
- HasFlash是否有闪光灯()
- 检查设备是否有闪光灯。
- AvailableCamerasCount获取可用摄像头数量()
- 获取可用摄像头的数量。
- IsRecording是否正在录像()
- 检查当前是否正在录制视频。
事件
- PictureTaken拍照完成时(照片路径)
- 照片拍摄成功后触发,返回保存的文件路径。
- PictureError拍照出错时(错误信息)
- 拍照过程中发生错误时触发。
- CameraReady相机就绪时()
- 相机准备就绪时触发。
- CameraSwitched摄像头切换时(新摄像头ID)
- 摄像头切换完成时触发,返回切换后的摄像头 ID。
- FocusedOnPoint点按对焦完成时(x,y)
- 对触摸点对焦完成时触发,返回对焦点的坐标。
- RecordingStarted开始录像时(视频路径)
- 视频录制开始时触发,返回视频的保存路径。
- RecordingStopped录像停止时(视频路径)
- 视频录制停止时触发,返回视频的保存路径。
- RecordingError录像出错时(错误信息)
- 视频录制过程中发生错误时触发。
- ZoomChanged缩放变化时(缩放级别,缩放系数)
- 缩放级别变化时触发,无论是通过手势还是通过积木设置。
- ZoomEnded缩放结束时(缩放级别,缩放系数)
- 用户结束缩放操作时触发(松开屏幕或结束双指捏合)。
属性
- CameraId摄像头 ID
- 要使用的摄像头 ID(0:后置,1:前置)。
- FlashEnabled闪光灯开关
- 打开或关闭相机闪光灯。
- AutoFocusEnabled自动对焦开关
- 打开或关闭自动对焦。
- TouchToFocusEnabled触摸对焦开关
- 打开或关闭触摸对焦。开启后,触摸屏幕上的指定点即可对焦。
- JpegQuality照片质量
- 照片的 JPEG 质量(0-100)。
- SaveDirectory保存目录
- 照片的保存目录。目前仅支持保存到 Pictures(图片)目录。
- CaptureSoundEnabled拍照提示音开关
- 拍照时打开或关闭快门声。
- VideoBitrate视频码率
- 视频码率(比特每秒)。
- VideoFrameRate视频帧率
- 视频的每秒帧率。
- FocusFrameColor对焦框颜色
- 对焦框的颜色。
- FocusFrameDisappearanceTime对焦框消失时间
- 对焦框的消失时间(毫秒)。
- FocusFrameSize对焦框大小
- 对焦框的大小。
使用示例
以下示例假设已在设计视图中添加:一个用于显示相机预览的垂直布局、若干个按钮和一个标签。
启动相机并拍照
when Screen1.Initialize() {
JoeDevCamera1.StartCamera(垂直布局1)
}
when 按钮_拍照.Click() {
JoeDevCamera1.TakePicture()
}
when JoeDevCamera1.PictureTaken(imagePath) {
标签_状态.Text = imagePath
}
录制视频(一个按钮切换开始/停止)
when 按钮_录像.Click() {
if JoeDevCamera1.IsRecording() {
JoeDevCamera1.StopRecording()
} else {
JoeDevCamera1.StartRecording()
}
}
when JoeDevCamera1.RecordingStarted(videoPath) {
标签_状态.Text = join("开始录像:", videoPath)
}
when JoeDevCamera1.RecordingStopped(videoPath) {
标签_状态.Text = join("已保存:", videoPath)
}
变焦
when 按钮_放大.Click() {
JoeDevCamera1.SetZoomLevel(JoeDevCamera1.GetZoomLevel() + 1)
}
when JoeDevCamera1.ZoomChanged(zoomLevel, zoomFactor) {
标签_状态.Text = join("当前缩放:", zoomLevel)
}
切换前后摄像头
when 按钮_切换.Click() {
JoeDevCamera1.SwitchCamera()
}
when JoeDevCamera1.CameraSwitched(newCameraId) {
if newCameraId == 0 {
标签_状态.Text = "后置摄像头"
} else {
标签_状态.Text = "前置摄像头"
}
}
when JoeDevCamera1.FocusedOnPoint(x, y) {
标签_状态.Text = "对焦完成"
}
版本更新
原作者已于 2026-03-07 发布 v1.1(更新内容如下)。本页 API 以上方本站分发的 v1.0 为准;如需 v1.1,请到原帖下载最新附件。
- 新增了一个检查相机权限是否已授予的方法(HasCameraPermission)。
- PictureTaken 事件新增了一个参数,用于接收所拍照片的 content URI。
- 使用伴侣(Companion)测试时,现在可以把 imagePath 放到图像组件里直接查看拍到的照片。
版权信息
本文档内容依据原作者发布页面整理翻译,版权归原作者所有。
- 原作者:Joe J. Sánchez(Joejsanz)
- 原始网址:https://community.appinventor.mit.edu/t/camera-displays-the-camera-to-take-photos-and-record-videos-in-an-arrangement/154998
- 发布日期:2025年9月4日
扫码添加客服咨询