CameraOverlay 拓展
层叠相机:在相机实时预览上叠加一张可调透明度的参考照片,对齐机位翻拍对比。 适合装修进度、设备安装前后、绿植生长这类「同一个位置拍两次」的记录需求: 先拍一张基准照设为参考底图,之后把手机摆到大致相同的位置,透过半透明的旧照片 对齐角度,再拍一张——两张照片视角一致,直接并排对比。
功能一览:
- 相机画面显示在指定的布局组件里(前后摄像头可切换)
- 参考底图透明度 0~100 实时调节(滑动条拖着看效果)
- 手电筒常亮,方便拍暗处设备
- 拍照可把半透明参考层一起合成进照片,所见即所得
- 需要 Android 5.0(API 21)以上系统
快速上手
- 设计器里放一个垂直布局(如 垂直布局1,宽 300、高 400)当预览窗口,再放两个按钮、一个滑动条(MinValue 0、MaxValue 100)、一个标签
- 从拓展导入 CameraOverlay,把
PreviewHost属性设为 垂直布局1 - 拖动滑动条实时调参考图透明度;点「拍照对比」保存
- 拍完的路径在
GotPicture事件里拿到,设回ReferenceImage就成了下一张的参考底图
when 按钮1.Click() {
CameraOverlay1.PreviewHost = 垂直布局1
CameraOverlay1.StartPreview()
}
when 滑动条1.PositionChanged(thumbPosition) {
CameraOverlay1.Opacity = thumbPosition
}
when 按钮2.Click() {
CameraOverlay1.TakePicture()
}
when CameraOverlay1.GotPicture(path) {
CameraOverlay1.ReferenceImage = path
标签1.Text = "已保存,并设为参考底图"
}
when CameraOverlay1.CameraError(message) {
标签1.Text = message
}
典型工作流(前后对比记录)
- 第一次拍摄:
SaveWithOverlay保持默认真,拍下现场照片 A GotPicture里把照片 A 的路径设为ReferenceImage——预览画面上立刻浮出半透明的 A- 调
Opacity(一般 40~60):既能看清 A 的轮廓,又不挡住实时画面 - 移动手机,让实时画面与半透明的 A 轮廓重合(FitMode 用默认 crop 时两者同视角,最容易对齐)
- 再拍一张得到照片 B:A、B 机位一致,直接对比前后变化
- 换位置重新开始时用
ClearReference()清掉参考层
属性
- PreviewHost
- 预览宿主:放一个布局组件(建议垂直布局),相机画面会显示在其中。设计器和代码块里都可以设置。
- ReferenceImage
- 参考底图:设计器里选素材,块里也可以填素材名或照片绝对路径(GotPicture 返回的路径可直接用)。
- Opacity
- 参考底图透明度:0 完全透明,100 完全不透明,中间可自由调节。默认 50。
- CameraFront
- 是否使用前置摄像头。切换会自动重启预览。默认假。
- TorchEnabled
- 手电筒常亮(需设备闪光灯支持),方便拍暗处设备。
- SaveWithOverlay
- 拍照时是否把半透明参考层一起合成进照片(所见即所得)。默认真。关闭则保存不含参考层的全分辨率原片。注意:合成照片的分辨率等于预览分辨率。
- FitMode
- 参考底图铺放方式:
stretch拉伸铺满,fit完整显示居中,crop铺满裁切(推荐,与相机画面同视角对齐)。默认 crop。
事件
- CameraReady()
- 相机预览就绪时触发,此时可以开始调节透明度、拍照。
- GotPicture(path)
- 拍照保存完成时触发,参数为照片的绝对路径。可把它设为 ReferenceImage 作为下一张的参考底图。
- CameraError(message)
- 出错时触发,参数为中文错误说明。
方法
- StartPreview()
- 开始相机预览(自动申请相机权限)。需要先设置 PreviewHost 属性,且需要 Android 5.0 以上系统。
- StopPreview()
- 停止相机预览并释放相机(别的应用就能用相机了)。
- TakePicture()
- 拍照保存到应用图片目录,完成后触发 GotPicture 事件。SaveWithOverlay 为真时照片里带半透明参考层(与屏幕所见一致)。
- ClearReference()
- 清除参考底图叠加层(不影响参考图属性,重设透明度不会恢复)。
注意事项
- 照片保存在应用图片目录(
Android/data/<包名>/files/Pictures/CameraOverlay/),文件名带时间戳 - 合成照片(SaveWithOverlay 为真)分辨率等于预览分辨率;需要原图请临时关掉再拍
- 应用切后台会自动停止预览、回到前台自动恢复;
StopPreview后再StartPreview即可重开
拓展下载
案例下载
上面的快速上手就是一份可直接运行的完整工程(含拓展、布局与全部代码块):
扫码添加客服咨询