天天看點

android 畫布 透明,Android透明畫布(surfaceview)

我有一個面闆,通過relativelayout放置在另一個視圖的頂部.

我想給這個面闆一個透明的背景,但是在搜尋幾個小時之後找不到正确的方法.當我将alpha設定回0時,我最終得到黑色背景.

希望有人可以幫助我.

非常感謝!

該面闆通過以下代碼繪制:

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);

}

}

}

解決方法:

在構造函數中:

setZOrderOnTop(true);

在holder.addCallback(this)之後:

holder.setFormat(PixelFormat.TRANSPARENT);

在繪圖開始時:

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

标簽:android,transparency,draw,android-canvas

來源: https://codeday.me/bug/20190928/1827327.html