Ich habe ein einfaches Programm, das die Vorschau des Camerain ein zeichnet SurfaceView. Ich versuche, die onPreviewFrameMethode zu verwenden, die jedes Mal aufgerufen wird, wenn ein neuer Frame in die gezeichnet SurfaceViewwird, um die invalidateMethode auszuführen, die die Methode aufrufen soll onDraw. Tatsächlich wird die onDrawMethode aufgerufen, aber es wird nichts gedruckt (ich denke, die Kameravorschau überschreibt den Text, den ich zeichnen möchte).
Dies ist eine vereinfachte Version der SurfaceViewUnterklasse, 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);
}
}