Wie zeichnet man ein Overlay auf ein SurfaceView, das von der Kamera auf Android verwendet wird?
Ich habe ein einfaches Programm, das die Vorschau des @ zeichnCamera
in einSurfaceView
. Was ich versuche zu tun, ist die Verwendung deronPreviewFrame
-Methode, die jedes Mal aufgerufen wird, wenn ein neuer Frame in das @ -Zeichen gezeichnet wiSurfaceView
, um das @ auszuführinvalidate
Methode, die das @ aufrufen soonDraw
Methode. In der Tat, dieonDraw
ie @ -Methode wird aufgerufen, aber es wird nichts gedruckt (ich vermute, die Kameravorschau überschreibt den Text, den ich zu zeichnen versuche).
Dies ist eine vereinfachte Version desSurfaceView
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);
}
}