title: How to draw an overlay on a SurfaceView used by Camera on Android?
body: <p>I have a simple program that draws the preview of the <code>Camera</code> into a <code>SurfaceView</code>. What I'm trying to do is using the <code>onPreviewFrame</code> method, which is invoked each time a new frame is drawn into the <code>SurfaceView</code>, in order to execute the <code>invalidate</code> method which is supposed to invoke the <code>onDraw</code> method. In fact, the <code>onDraw</code> method is being invoked, but nothing there is being printed (I guess the camera preview is overwriting the text I'm trying to draw).</p>
  
  <p>This is a simplify version of the <code>SurfaceView</code> subclass I have:</p>
  
  <pre><code>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);
   }
  }
  </code></pre>