Wie zeichne ein Overlay auf einem SurfaceView von Kamera auf Android verwendet?
Habe ich ein einfaches Programm, das zeichnet die Vorschau der Camera
in eine SurfaceView
. Was ich versuche zu tun, ist mit der onPreviewFrame
- Methode, die aufgerufen wird, jedes mal, wenn ein neues Bild gezeichnet wird, in der SurfaceView
um durchzuführen, die invalidate
Methode, die angeblich zu berufen, die onDraw
Methode. In der Tat, die onDraw
Methode aufgerufen wird, aber nichts gedruckt wird (ich denke, die Kamera-Vorschau überschreiben Sie den text, den ich versuche zu zeichnen).
Dies ist eine Vereinfachung version des SurfaceView
Unterklasse, die ich habe:
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);
}
}
InformationsquelleAutor der Frage Cristian | 2010-05-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
SurfaceView
wahrscheinlich funktioniert nicht wie eine normaleView
in dieser Hinsicht.Führen Sie stattdessen folgende Schritte:
SurfaceView
innerhalb einesFrameLayout
oderRelativeLayout
imIhre layout-XML-Datei, da beide von
diese ermöglichen die Stapelung von widgets auf
die Z-Achse
in einem separaten benutzerdefinierten
View
KlasseKlasse, um die layout-XML-Datei als
Kind der
FrameLayout
oderRelativeLayout
haben, aber es erscheinennach der
SurfaceView
Dadurch wird die benutzerdefinierte
View
Klasse zu erscheinen, schweben über derSurfaceView
.Sehen Sie hier ein Beispiel-Projekt Ebenen popup-Fenster über eine
SurfaceView
verwendet für die video-Wiedergabe.InformationsquelleAutor der Antwort CommonsWare
Versuchen Sie anrufen
setWillNotDraw(false)
aussurfaceCreated
:und ruft
invalidate
ausonTouchEvent
:InformationsquelleAutor der Antwort maximus
Denke ich, sollten Sie rufen Sie die
super.draw()
Methode zuerst, bevor du irgendetwas in der surfaceView die draw-Methode.InformationsquelleAutor der Antwort Devashish Kunal