Android透明canvas(surfaceview)

我有一个通过相关布局放置在另一个视图顶部的面板。

我想给这个面板一个透明的背景,但没有find正确的方法来做这个后,search了几个小时。 当我将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); } } } 

Solutions Collecting From Web of "Android透明canvas(surfaceview)"

在构造函数中:

 setZOrderOnTop(true); 

holder.addCallback(this)

 holder.setFormat(PixelFormat.TRANSPARENT); 

在绘图之初:

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

我从同一个问题中复制了解决scheme: 如何使表面视图变得透明,并使它与类似于您的设置一起工作。

对我来说关键的一点是“setZOrderOnTop(true)”设置,我在第一遍中愚蠢地忽略了这个设置。 我把它放在构造函数中,并将我的像素格式设置为surfaceCreated内的RGBA_8888。

在这一点上,从顶层布局的背景是可见的。

尝试这个:

 getHolder().setFormat(PixelFormat.TRANSLUCENT); 

用关键字surfaceview而不是canvas查找后,我发现这是不可能的。 欲了解更多信息,请参阅: 如何使表面视图透明

因为canvas的背景是静态的,所以我给了它完全相同的背景。 现在看起来它是透明的:)

  Bitmap bg = BitmapFactory.decodeResource(getResources(), R.drawable.background_panel_800_480); canvas.drawBitmap(bg, 0, 0, null);