2012-01-02 36 views
6

Tôi muốn làm cho khu vực Canvas minh bạch vì tôi muốn thêm một hình ảnh đằng sau nó để hành động Canvas xảy ra trên mã image.My cho vải là ở đâyLàm thế nào để làm cho khu vực vẽ Canvas trong suốt trong 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); 
} 

}

Làm thế nào để đạt được nó, bất kỳ đoạn nào trên đó sẽ rất hữu ích. Cảm ơn

Trả lời

23

tôi có đầu ra của thành viên này

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

well, tôi không chắc chắn về việc vẽ canvas trong suốt, nhưng trong trường hợp của bạn, bạn có thể thực hiện tinh chỉnh, vẽ canvas bằng chính hình nền đó.

Và sau đó bạn có thể vẽ/vẽ bằng ngón tay trên đó.

Mã dụ:

 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

tôi đã cố gắng này ... – Karthik

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

thuộc tính đầu tiên là alpha và còn lại là RGB màu sắc.

hoặc

canvas.drawColor(Color.TRANSPARENT); 
+4

Điều này cả hai dường như không hoạt động, nó chỉ có màu đen. – Karthik

+0

hiện nó vẽ bất kỳ màu nào khác một cách chính xác? màu nền sau của bề mặt của bạn là gì? –

+0

Nó vẽ màu khác một cách chính xác nhưng khi tôi thử điều này tôi chỉ nhận được nền đen ..Làm thế nào tôi có thể loại bỏ điều này .. – Karthik

4

Trong phương pháp onDraw() bạn thêm này:

canvas.drawColor(0x00AAAAAA); 

Điều này sẽ làm canvas minh bạch và background View sẽ được hiển thị .

12

Nếu bạn muốn có một khung với nền trong suốt, bạn phải cấu hình hình nền cho

mCanvas = new canvas (mBackgroundBitmap);

với Bitmap.Config.ARGB_4444

Và sử dụng màu sắc như 0x00000000 trong suốt

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

hy vọng điều này giúp! Tôi có một bức tranh khá trong suốt: D yay!

0

Đặt màu nền của chế độ xem của canvas thành # 00000000

0

Bạn có thể tạo bitmap có cùng kích thước với canvas. Xóa tất cả các màu sắc của bitmap sử dụng Color.TRANSPARENCY và thiết lập nó như là một bitmap vải:

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

UnsupportedOperationException –

1

này làm cho vải tramsparent và nó là công việc đối với tôi :)

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.OVERLAY); 
Các vấn đề liên quan