Ich habe ein einfaches Programm, das die Vorschau des Camera
in ein zeichnet SurfaceView
. Ich versuche, die onPreviewFrame
Methode zu verwenden, die jedes Mal aufgerufen wird, wenn ein neuer Frame in die gezeichnet SurfaceView
wird, um die invalidate
Methode auszuführen, die die Methode aufrufen soll onDraw
. Tatsächlich wird die onDraw
Methode aufgerufen, aber es wird nichts gedruckt (ich denke, die Kameravorschau überschreibt den Text, den ich zeichnen möchte).
Dies ist eine vereinfachte Version der SurfaceView
Unterklasse, die ich habe:
public class Superficie extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
public Camera camera;
Superficie(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(final SurfaceHolder holder) {
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera arg1) {
invalidar();
}
});
} catch (IOException e) {}
}
public void invalidar(){
invalidate();
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// nothing gets drawn :(
Paint p = new Paint(Color.RED);
canvas.drawText("PREVIEW", canvas.getWidth() / 2,
canvas.getHeight() / 2, p);
}
}