如何在Android中使Canvas绘制区域透明?

Kar*_*hik 9 android canvas image transparent

我想让Canvas区域透明,因为我想在它后面添加一个Image,以便Canvas动作发生在图像上方.我的画布代码在这里

public class Panel extends SurfaceView implements SurfaceHolder.Callback {

private ViewThread mThread;
private ArrayList<Element> mElements = new ArrayList<Element>();

public Panel(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    getHolder().addCallback(this); 
    mThread = new ViewThread(this); 
} 


public void doDraw(Canvas canvas) {
    canvas.drawColor(Color.TRANSPARENT);
    synchronized (mElements) {
        for (Element element : mElements) {
            element.doDraw(canvas);
        }
    }
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    // TODO Auto-generated method stub
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    if (!mThread.isAlive()) {
        mThread = new ViewThread(this);
        mThread.setRunning(true);
        mThread.start();
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    if (mThread.isAlive()) {
        mThread.setRunning(false);
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    synchronized (mElements) {
        mElements.add(new Element(getResources(), (int) event.getX(), (int) event.getY()));
    }
    return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

}

如何实现它,任何片段都会非常有用.谢谢

Kar*_*hik 24

我得到了输出

 public Panel(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.setBackgroundColor(Color.TRANSPARENT);                 
    this.setZOrderOnTop(true); //necessary                
    getHolder().setFormat(PixelFormat.TRANSPARENT); 
    getHolder().addCallback(this); 
    mThread = new ViewThread(this); 

} 
Run Code Online (Sandbox Code Playgroud)


Uni*_*paw 12

如果您想要具有透明背景的画布,则必须为其配置背景图像

mCanvas = new Canvas(mBackgroundBitmap);

使用Bitmap.Config.ARGB_4444

并使用像0x00000000这样的颜色作为透明

    Bitmap mBackgroundImage = Bitmap.createBitmap(Size, Size,
                    Bitmap.Config.ARGB_4444);
    mCanvas = new Canvas(mBackgroundImage);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!我有一个非常透明的画布:D yay!

  • 这里的小更新:最好使用 ARGB_8888,因为 ARGB_4444 现在已被弃用。来源:https://developer.android.com/reference/android/graphics/Bitmap.Config (2认同)

Awa*_*riq 9

canvas.drawColor(Color.argb(0, 255, 255, 255));
Run Code Online (Sandbox Code Playgroud)

第一个属性是alpha,rest是RGB颜色.

要么

canvas.drawColor(Color.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)

  • 这两者似乎都不起作用,它只留下黑色. (4认同)

小智 7

这使画布透明,这对我有用:)

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.OVERLAY);
Run Code Online (Sandbox Code Playgroud)


小智 5

在您的onDraw()方法中添加以下内容:

canvas.drawColor(0x00AAAAAA);
Run Code Online (Sandbox Code Playgroud)

这将使您的canvas透明和background View可见。