我用过示例指南创建一个名为 CameraPreview 的类,该类继承自 SurfaceView 类,并显示相机预览。我还创建了另一个名为 DrawOnTop 的自定义视图类,它直接从 View 继承,我用它来在预览顶部绘制文本和其他项目。每个视图类本身都可以正常工作,但是当我将两个视图加载到活动中时,CameraPreview 始终占主导地位,并且 DrawOnTop 类中的任何对象或文本都不会出现在相机预览的顶部。
因为我使用两个自定义视图类,所以我不会费心在活动的 onCreate 中从 XML 中扩充任何视图类,因此 onCreate 不包含任何对 setContentView(...) 的调用。相反,我实例化每个视图类,并使用 addContentView(...) 将每个视图对象加载到活动的根视图中,即
CameraPreview preview = new CameraPreview(this);
addContentView(preview, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
DrawOnTop drawontop = new DrawOnTop(this);
addContentView(drawontop, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
drawontop.setVisibility(View.VISIBLE);
drawontop.bringToFront();
我查看了活动的根视图,结果发现它是 FrameLayout 类型。正如我上面所说,这种方法对于每种视图本身都适用。
为了让 DrawOnTop 类出现在相机预览的顶部,我尝试使用 BringToFront() 但它没有任何效果。我正在运行 Android 版本 4.1.1 的 Samsung Galaxy Note 2 LTE 上测试该应用程序。
谁能告诉我我做错了什么?
此链接可能有帮助:如何在 Android 上的 Camera 使用的 SurfaceView 上绘制叠加层?
您只需将 CameraPreview 视图放入 FrameLayout 中,并将 DrawOnTop 视图与 FrameLayout 置于同一级别,即
FrameLayout frame = new FrameLayout(this);
addContentView(frame, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
CameraPreview preview = new CameraPreview(this);
frame.addView(mPreview);
DrawOnTop drawontop = new DrawOnTop(this);
addContentView(drawontop, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
drawontop.setVisibility(View.VISIBLE);
drawontop.bringToFront();
那对你有用吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)