Android相机图片预览不正确

时间:2016-04-27 18:54:55

标签: android

我正在尝试编写一个显示android中相机表面预览的类。我试过以下代码。但是预览没有显示出来。我试过更改参数但没有运气。我已经完成了logcat。没有显示任何内容,没有错误或警告。仅显示黑屏。该应用程序不会崩溃。

public class Preview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holder;
private Camera camera;

public Preview(Context context, Camera camera) {
    super(context);
    this.camera = camera;
    holder = getHolder();
    holder.addCallback(this);
    holder.setFixedSize(50, 50);
}
public void surfaceCreated(SurfaceHolder holder) {

    try {
        camera.setPreviewDisplay(holder);
        camera.startPreview();
    } catch (IOException e) {
        Log.d("error", "Can't set camera preview: " + e.getMessage());
    }

}

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    if (this.holder.getSurface() == null) {
        return;
    }
    try {
        camera.stopPreview();
    } catch (Exception e) {
    }
    try {
        camera.setPreviewDisplay(this.holder);
        camera.startPreview();
    } catch (Exception e) {
        Log.d("DG_DEBUG", "Error starting camera preview: " + e.getMessage());
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {

}

}

1 个答案:

答案 0 :(得分:0)

这里的问题似乎是你没有包括持有人的类型。您需要将类型设置为SURFACE_TYPE_PUSH_BUFFERS。添加回调后使用下面的行

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

所以你的构造函数应该如下所示

public Preview(Context context, Camera camera) {
    super(context);
    this.camera = camera;
    holder = getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    holder.setFixedSize(50, 50);
}

我试过了代码。它现在完美运作。