que tienen un sencillo programa que señala a la vista previa de la Camera
en un SurfaceView
. Lo que estoy tratando de hacer es usar el método onPreviewFrame
, que se invoca cada vez que una nueva trama se introduce en el SurfaceView
, con el fin de ejecutar el método invalidate
que se supone debe invocar el método onDraw
. De hecho, se invoca el método onDraw
, pero no se está imprimiendo nada (supongo que la vista previa de la cámara sobrescribe el texto que intento dibujar).¿Cómo dibujar una superposición en un SurfaceView utilizado por la cámara en Android?
Ésta es una versión de la SurfaceView
simplificar subclase que tengo:
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);
}
}
puede u pls me ayude cómo u han hecho im tratando de cambiar el color de dibujo en el botón de clic como BUTTON1- > botón rojo2-> amarillo, etc. ¿cómo haré esto usando un lienzo? Quiero aplicar en la cámara en vivo igual que efectos de cámara en vivo trabajan – Erum