2012-01-02 106 views
6

我想作画布的区域透明的,因为我想补充的图片背后,使画布行动发生在画布的image.My以上代码是在这里如何使Canvas在android中绘制区域透明?

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

}

如何实现它,任何片段将是非常有帮助的。谢谢

回答

23

我得到这个

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

} 
0

好吧,我不知道绘制透明画布,但在你的情况下,你可以做一个调整,使用背景图像绘制画布iteself。

然后你可以用手指在上面画画。

代码例如:

 BitmapDrawable bd = (BitmapDrawable)<YOUR_ACTIVITY>.this.getResources().getDrawable(R.drawable.<DRAWBLE_ID>); 
     Bitmap b = bd.getBitmap(); 

     mBitmap = Bitmap.createBitmap(b,0,0,100,100); // This line is required only if you wanna some change in the bitmap you created 
     mCanvas = new Canvas(mBitmap); 
+0

我想这... – Karthik 2012-01-03 13:25:31

6
canvas.drawColor(Color.argb(0, 255, 255, 255)); 

第一属性为α型,其余的是RGB颜色。

canvas.drawColor(Color.TRANSPARENT); 
+4

这两个似乎都不起作用,它只留下黑色。 – Karthik 2012-01-02 19:22:34

+0

它是否正确绘制其他颜色? 表面视图的背景颜色是什么? – 2012-01-03 05:35:51

+0

它正确绘制其他颜色,但是当我尝试这个时,我只得到黑色背景..我怎样才能摆脱这个.. – Karthik 2012-01-03 07:17:12

4

输出在你onDraw()方法补充一点:

canvas.drawColor(0x00AAAAAA); 

这会让你的canvas透明和background View将可见。

12

如果你想有一个画布使用透明背景,你必须配置背景图像

mCanvas =新的Canvas(mBackgroundBitmap);

与Bitmap.Config.ARGB_4444

而且使用的颜色,如00000000透明

Bitmap mBackgroundImage = Bitmap.createBitmap(Size, Size, 
        Bitmap.Config.ARGB_4444); 
    mCanvas = new Canvas(mBackgroundImage); 

希望这有助于!我有一个非常透明的画布:D耶!

0

设置画布视图背景颜色为#00000000

0

您可以创建一个同样大小的画布上的位图。使用Color.TRANSPARENCY擦除位图的所有颜色,并把它设置为画布位:

Bitmap transparentBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), 
Bitmap.Config.ARGB_8888); 
transparentBitmap.eraseColor(Color.TRANSPARENT); 
canvas.setBitmap(transparentBitmap); 
+0

UnsupportedOperationException – 2017-02-14 07:18:08

1

本作画布tramsparent,这是为我工作:)

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.OVERLAY); 
相关问题