我正在尝试使用以下代码将相机预览绘制到SurfaceHolder上:
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
Log.d(TAG, "Releasing camera first, just to make sure");
releaseCamera();
Log.d(TAG, "Opening Camera object.");
mCamera = Camera.open();
if (mCamera == null) {
Log.d(TAG, "Camera is null.");
}
}
@Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
Log.d(TAG, "Surface created.");
try {
if (holder == null) {
Log.d(TAG, "SurfaceHolder is empty.");
}
Log.d(TAG, "Setting preview display.");
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
Log.d(TAG, "IOException on setPreviewDisplay.");
releaseCamera();
}
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
Log.d(TAG, "Surface changed.");
Log.d(TAG, "Starting preview.");
mCamera.startPreview();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在模拟器或我的实际手机上运行应用程序时,我多次收到错误"Overlay create failed - retrying",然后是"Overlay Creation Failed!".然后我得到一个RuntimeException,说明"startPreview失败".
我已经阅读了示例代码,以及这里的许多相关问题,但没有运气.我还检查了权限,我认为这是正确的.有任何想法吗?
提前致谢.
设置SurfaceHolder时,请尝试将类型设置为SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS:
SurfaceHolder holder = surfaceView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Run Code Online (Sandbox Code Playgroud)
surfaceView是SurfaceView的一个实例,它在我的布局中声明.
| 归档时间: |
|
| 查看次数: |
4107 次 |
| 最近记录: |