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