Android transparente Leinwand (surfaceview)
Ich habe ein panel, die übereinander platziert anzeigen über ein relativelayout.
Ich würde gerne diese Tafel einen transparenten hintergrund, aber nicht finden, den richtigen Weg dies zu tun, nach der Suche für ein paar Stunden. Wenn ich die alpha auf 0 zurück, die ich am Ende mit einem schwarzen hintergrund.
Ich hoffe, jemand hier kann mir dabei helfen.
Vielen Dank!
Dem panel gezeichnet wird über diesen code:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class Panel extends SurfaceView implements SurfaceHolder.Callback {
private ViewThread mThread;
Paint paint = new Paint();
public Panel(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
getHolder().addCallback(this);
mThread = new ViewThread(this);
}
public void doDraw(Canvas canvas) {
canvas.drawARGB(50, 120, 120, 120);
paint.setARGB(255, 255, 0, 0);
paint.setStrokeWidth(2);
int CanvasHeight = canvas.getHeight();
int CanvasWidth = canvas.getWidth();
canvas.drawLine(LeftStartX, LeftStartY, StopX, StopY, paint);
}
public void updateDrawing(float LB, float RB, float BD, float AH, float AD ){
Left = LB;
Right = RB;
Distance = BD;
AHeight = AH;
ADistance = AD;
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
public void surfaceCreated(SurfaceHolder holder) {
if (!mThread.isAlive()) {
mThread = new ViewThread(this);
mThread.setRunning(true);
mThread.start();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
if (mThread.isAlive()) {
mThread.setRunning(false);
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Konstruktor:
Nach
holder.addCallback(this)
:Beginn der Zeichnung:
setZOrderOnTop
macht es den Anschein, an der Spitze des Fensters. So, jetzt die SurfaceView angezeigt wird, über deren hintergrund (die ist perfekt für die Transparenz), aber dann, wenn ich ziehen meine Navigation Drawer die SurfaceView ist auch noch ganz oben (statt unten), das sieht schrecklich. Irgendeine Idee?Kopierte ich die Lösung von der gleichen Frage: wie man surfaceview transparent und habe es auf Arbeit mit einem setup ähnlich wie bei Ihnen.
Das entscheidende Element war für mich die 'setZOrderOnTop(true)' - Einstellung, die ich dummerweise ignoriert, auf den ersten pass. Ich das in den Konstruktor, und mein pixel-format zu RGBA_8888 innen surfaceCreated.
An dieser Stelle, den hintergrund von der top-level-layout sichtbar war.
Versuchen Sie dies:
getHolder().addCallback(this);
aber der hintergrund blieb schwarz.setBackgroundResource(0)
oder in xml -android:background="@null"
Nach der Suche mit dem keyword surfaceview statt der Leinwand iI fand heraus, dass es nicht möglich ist. Weitere Informationen finden Sie unter: wie man surfaceview transparent
Da der hintergrund des Bildes ist statisch, die ich habe, gab es den exakt gleichen hintergrund. Jetzt sieht es aus wie es transparent ist 🙂