2013-01-15 49 views
3

我需要在ImageView上裁剪角落。不要將它們四捨五入,而是從每個角落擦除三角形。如何擦除畫布上的路徑區域(Android)

似乎唯一的方法就是覆蓋onDraw方法並使用Path從畫布上清除這些區域。問題是我沒有純色背景,所以我需要擦除這些區域,但不要填充它們的某種顏色。

我用下面的代碼爲:

@Override 
protected void onDraw(Canvas canvas) { 
    Path path = new Path(); 
    path.moveTo(0, 0); 
    path.lineTo(20, 0); 
    path.lineTo(0, 20); 
    path.close(); 

    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
    canvas.drawPath(path, paint); 
    super.onDraw(canvas); 
} 

但角球使得黑,但並不透明。你可以幫幫我嗎?或者你可能知道我的任務更好的解決方案。這是它的樣子。

enter image description here

回答

-1

使用此行

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 

,而不是這個

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
+0

我試過,但它使沒有什麼。我沒有事件黑色三角形。整個區域都是白色的。 – Dmitriy

2

您可以剪輯你的畫布對象:

@Override 
protected void onDraw(Canvas canvas) { 
    final Path path = new Path(); 
    final int count = canvas.save(); 

    path.moveTo(0, 20); 
    path.lineTo(20, 0); 
    path.lineTo(getWidth(), 0); 
    path.lineTo(getWidth(), getHeight()); 
    path.lineTo(0, getHeight()); 
    path.close(); 

    canvas.clipPath(path); 
    super.onDraw(canvas); 
    canvas.restoreToCount(count); 
} 

請注意啓用硬件加速功能後,無法在Android 3.0或更高版本上運行。

+0

沒有爲我工作。我仍然有白色矩形沒有任何角落 – Dmitriy

+0

嘗試禁用硬件加速 –

+0

我試圖在AndroidManifest.xml中手動禁用它,但它沒有幫助 – Dmitriy

6

爲了用透明色繪製您必須使用PaintsetXfermode其中如果設置了位圖到你的畫布纔會工作。如果你按照下面的步驟,你應該得到所需的結果。

  1. 創建畫布並設置其位圖。

    mCanvas = new Canvas(); 
    mBitmap= Bitmap.createBitmap(scrw, scrh, Config.ARGB_8888); 
    mCanvas.setBitmap(mBitmap); 
    
  2. 當你想刪除某些東西時,你只需要使用setXfermode。

    if (isErasing) 
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
    else 
        mPaint.setXfermode(null); 
    
  3. 現在,你應該能夠戰平使用透明色:

    mCanvas.drawPath(yourpath, mPaint);

+0

繪製透明顏色,但繪製的路徑是黑色的,任何解決方法? ? –

相關問題