I've got a panel which is placed on top of another view via a relativelayout.
I would like to give this panel a transparent background, but didn't find the correct way to do this after searching for some hours. When I set the alpha back to 0 I end up with a black background.
Hopefully someone here can help me with this.
Thanks a lot!
The panel is drawn via this 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);
}
}
}
In the constructor:
setZOrderOnTop(true);
After holder.addCallback(this)
:
holder.setFormat(PixelFormat.TRANSPARENT);
At the beginning of drawing:
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
I copied the solution from the same question: how to make surfaceview transparent and got it to work with a setup similar to yours.
The critical piece for me was the 'setZOrderOnTop(true)' setting, which I foolishly ignored on the first pass. I put that in the constructor, and set my pixel format to RGBA_8888 inside surfaceCreated.
At this point, the background from the top-level layout was visible.
Try this:
getHolder().setFormat(PixelFormat.TRANSLUCENT);
After searching with keyword surfaceview instead of canvas iI found out that it isn't possible. For more information see: how to make surfaceview transparent
Because the background of the canvas is static I've gave it the exact same background. Now it looks like it is transparent :)
Bitmap bg = BitmapFactory.decodeResource(getResources(), R.drawable.background_panel_800_480);
canvas.drawBitmap(bg, 0, 0, null);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With