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, dieonDrawie @ -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);
 }
}

Antworten auf die Frage(6)

Ihre Antwort auf die Frage