Android透明画布(surfaceview)
我有一个面板,它通过一个相对线放在另一个视图的顶部 我想给这个面板一个透明的背景,但在搜索了几个小时后没有找到正确的方法。当我将alpha设置回0时,我最终会得到一个黑色背景 希望这里有人能帮我 非常感谢 通过以下代码绘制面板:Android透明画布(surfaceview),android,transparency,android-canvas,draw,Android,Transparency,Android Canvas,Draw,我有一个面板,它通过一个相对线放在另一个视图的顶部 我想给这个面板一个透明的背景,但在搜索了几个小时后没有找到正确的方法。当我将alpha设置回0时,我最终会得到一个黑色背景 希望这里有人能帮我 非常感谢 通过以下代码绘制面板: import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.Attr
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);
}
}
}
试试这个:
getHolder().setFormat(PixelFormat.TRANSLUCENT);
用关键字surfaceview而不是canvas iI搜索后,发现这是不可能的。有关更多信息,请参阅: 因为画布的背景是静态的,所以我给了它完全相同的背景。现在它看起来是透明的:)
我从同一个问题中复制了解决方案:并使其与您的设置类似 对我来说最关键的是“setZOrderOnTop(true)”设置,我在第一次通过时愚蠢地忽略了它。我将其放入构造函数中,并将我的像素格式设置为RGBA_8888 inside surfaceCreated 此时,顶层布局的背景可见。在构造器中:
setZOrderOnTop(true);
在holder.addCallback(this)之后:
在绘图开始时:
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
谢谢你的回答,但不幸的是,这并没有解决问题。我把这一行放在
getHolder().addCallback(this)的上面和下面代码>但背景一直是黑色的。嗯。。使用setBackgroundResource(0)
或在xmlandroid:background=“@null”
Ferdy中删除背景怎么样,谢谢你的新建议,但不幸的是,这也没有解决问题。这也显示了一个黑色背景。setZOrderOnTop(true)是拼图中缺失的部分,它完全不直观。这很有帮助。非常感谢。哦,这就是答案!如果第一个调用使背景透明,那么最后一行还允许您使用alpha级别绘制位图。谢谢,它的效果有点太好了:setZOrderOnTop
使其显示在窗口的最顶部。因此,现在SurfaceView显示在其背景上方(这非常有利于透明度),但当我拖动导航抽屉时,SurfaceView也显示在其上方(而不是下方),这看起来很糟糕。有什么想法吗?@Dadou也有同样的问题,你找到解决办法了吗?我花了好几天的时间想弄明白。非常感谢你!!
holder.setFormat(PixelFormat.TRANSPARENT);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);