如何让 ViewPager 中每个 Fragment 中都显示摄像头预览画面?

2025 年 6 月 6 日
 idonttellyou
各位大佬,如题所示,如何实现?

我尝试使用了 github 中的 CameraView ,实现效果不行,每次滑动到新的 fragment 中,会关闭并重新打开摄像头,会有 3 秒左右的黑屏无画面。

我有一个想法是:在 ViewPager 页面打开摄像头,然后获取到预览画面数据,在分发给 fragment 页面进行绘制显示,但是如果将获取到的预览画面 byte[]转换成 bitmap 在分发显示会不会设备吃不消而造成卡顿或者溢出?

求教各位大佬!
3022 次点击
所在节点    Android
11 条回复
cjh1095358798
2025 年 6 月 6 日
不是很理解这样的需求
okakuyang
2025 年 6 月 6 日
同时显示多个 CameraView, 即使在不可见区域的 CameraView 页预先显示。
hahabird
2025 年 6 月 6 日
复用同一个 CameraView ??
MozzieW
2025 年 6 月 6 日
Camera 属于非常“重”的组件,不应该频繁重开关。你应该把 Camera 或者 CameraView 提升到 Activity ,每个 Fragment 只放一个 Container ,Fragment 展示的时候,从 Activity 获取到 Camera 相关组件
xmai
2025 年 6 月 6 日
摄像头只打开一次,页面切换时只切换预览输出的 Surface ,不重新初始化摄像头硬件。

1.创建一个全局的摄像头管理器,让所有 Fragment 共享同一个摄像头实例
2. Activity 级别管理摄像头开关
3. Fragment 只管理 Surface 的 绑定/解绑
4. 滑动时暂停预览,静止时恢复
icount
2025 年 6 月 6 日
#5 正解,将摄像头拿到数据和数据渲染分离开,可以搜索一下如何不预览拿到数据,以及如何自己在 surface ( SurfaceView or GlSurfaceView )上渲染 yuv.
idonttellyou
2025 年 6 月 6 日
@cjh1095358798 娱乐设备,用户可以在页面中左右滑动选择预设好的模板,这些模板上会有对应的摄像头画面位置。
idonttellyou
2025 年 6 月 6 日
@xmai
@icount 我也是这样想的,但是我目前没搜索到合适的绑定的办法,我在研究研究,谢谢各位大佬
xmai
2025 年 6 月 6 日
idonttellyou
2025 年 6 月 6 日
@xmai 大佬,没研究明白怎么绑定预览画面数据,之前没怎么接触过摄像头这块,太难了
0x0x
2025 年 6 月 11 日
把 5 楼的回答,贴到 AI

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1136706

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX