Hi,

I have a SurfaceView which displays the camera preview. I would like
to draw a small cross on the camera preview. Therefore i invalidate
the SurfaceView each time OnPreviewFrame of Camera.PreviewCallback
gets called. But the onDraw-Method of the SurfaceView doesn't get
called.

Here the source code of the class:

package de.blickle.massometer;

import java.io.IOException;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.hardware.Camera;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

class Preview extends SurfaceView implements SurfaceHolder.Callback {

  private Camera camera;

  Preview(Context context) {
    super(context);

    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    SurfaceHolder mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  }

  public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, acquire the camera and tell it
where
    // to draw.
    camera = Camera.open();
    camera.setDisplayOrientation(90);
    camera.setPreviewCallback(new Camera.PreviewCallback() {

      public void onPreviewFrame(byte[] data, Camera camera) {
        Preview.this.invalidate();
      }
    });
    try {
      camera.setPreviewDisplay(holder);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public void surfaceDestroyed(SurfaceHolder holder) {
    // Surface will be destroyed when we return, so stop the preview.
    // Because the CameraDevice object is not a shared resource, it's
very
    // important to release it when the activity is paused.
    camera.stopPreview();
    camera = null;
  }

  public void surfaceChanged(SurfaceHolder holder, int format, int w,
int h) {
    // Now that the size is known, set up the camera parameters and
begin
    // the preview.
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPreviewSize(w, h);
    camera.setParameters(parameters);
    camera.startPreview();
  }

  @Override
  protected void onDraw(Canvas canvas) {
    Paint p= new Paint(Color.RED);
    canvas.drawLine(0, canvas.getHeight()/2, canvas.getWidth(),
canvas.getHeight()/2, p);
    canvas.drawLine(canvas.getWidth()/2, 0, canvas.getWidth()/2,
canvas.getHeight(), p);
    super.onDraw(canvas);
  }
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to