4
我重寫Android的ImageView以使圖像的角落透明。我能夠做到這裁剪畫布在我的onDraw(帆布油畫):如何在Android畫布中擦除(使透明)一個自定義區域?
@Override
protected void onDraw(Canvas canvas) {
Path clipPath = new Path();
int w = this.getWidth();
int h = this.getHeight();
clipPath.addRoundRect(new RectF(0,0,w,h), 10.0f, 10.0f, Path.Direction.CW);
canvas.clipPath(clipPath);
super.onDraw(canvas);
}
不幸的是,這是不可能的抗鋸齒這個圓角矩形,其結果是醜陋的角落這樣的:
我知道我可以使用Paint
和PorterDuff.Mode.CLEAR
來清除我的畫布部分的抗鋸齒,我不知道的是將圓角指定爲要擦除的區域。我在尋找這樣的事情:
@Override
protected void onDraw(Canvas canvas) {
//superclass will draw the bitmap accordingly
super.onDraw(canvas);
final Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
//this will erase a round rectangle, I need the exact inverse
canvas.drawRoundRect(rect, rx, ry, paint);
}
有什麼辦法「抹掉」,而不是圓角矩形,但它的倒數,即,圓角?而如果我只想抹掉其中一個角落呢?
但是我應該在我的onDraw()中繪製實際的原始drawable嗎?我在android源代碼中看到[ImageView的onDraw()](http://androidxref.com/source/xref/frameworks/base/core/java/android/widget/ImageView.java)執行不同類型的檢查和畫布修改(例如:填充)。 – Pedro 2012-02-14 15:15:04
您將原始繪圖作爲BitmapShader繪製。圓角矩形之外的區域將以透明方式繪製。 – Freddroid 2012-02-14 15:20:54
「BitmapShader」的第一個參數不是可繪製的,而是位圖。 – 2015-02-18 09:40:51