J'ai un programme simple qui attire l'aperçu de l' Camera
en SurfaceView
. Ce que j'essaie de faire est d'utiliser l' onPreviewFrame
méthode, qui est appelée chaque fois qu'une nouvelle image est tirée dans l' SurfaceView
, pour l'exécution de l' invalidate
méthode qui est censé invoquer l' onDraw
méthode. En fait, l' onDraw
la méthode est appelée, mais rien n'est imprimé (je suppose que l'aperçu de la caméra est d'écraser le texte, je suis en train de dessiner).
C'est un de simplifier version de l' SurfaceView
sous-classe que j'ai:
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);
}
}