2015-05-22 77 views
2

我想玩帆布。我可以繪製一些三角形並填充它繪製一條路徑並繪製它。我使用了路徑,點和線。記住三角法是一個很好的練習。現在我想用圓圈做同樣的事情,如下所示。我想設置一個百分比並填充此圓直到圓的高度*百分比。我怎麼可以用畫布或圖像畫一個這樣的圓圈?畫一個圓圈部分填充動態

enter image description here

+0

你可以用'drawArc()'和'設置paint.setStyle(Paint.Style.FILL);' –

+0

與論壇網站不同,我們不使用「謝謝」,或「任何幫助表示讚賞」,或在[so]上簽名。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be - 從帖子中刪除)。順便說一句,它是「提前致謝」,而不是「感謝先進」。 –

回答

2

你應該想想有點不同。我會這樣做的方法是繪製一個彩色的矩形(其中高度是圓的預期高度的百分比),然後用圓圈裁剪。 This答案解釋瞭如何裁剪一個圓形圖像(我寧願鏈接,而不是重新輸入代碼)。

0

我終於做到了。我創建了兩種方法。按照羅爾斯特的建議,我創建了一個白色矩形作爲面具,其中高度是圓圈預期高度的百分比。

private Bitmap drawWithPorterDuff(Bitmap original, Bitmap mask, PorterDuff.Mode mode) { 
    Bitmap bitmap = Bitmap.createBitmap(original.getWidth(), original.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    Paint maskPaint = new Paint(); 
    maskPaint.setAntiAlias(true); 
    canvas.drawBitmap(original, 0, 0, null); 
    maskPaint.setXfermode(new PorterDuffXfermode(mode)); 
    canvas.drawBitmap(mask, 0, 0, maskPaint); 
    Bitmap edge = BitmapFactory.decodeResource(getResources(), R.drawable.edge); 
    maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.ADD)); 
    canvas.drawBitmap(edge, 0, 0, maskPaint); 
    return bitmap; 
} 

public Bitmap createMask(int width, int height) { 
    Paint paint = new Paint(); 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.WHITE); 
    paint.setAntiAlias(true); 
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    canvas.drawRect(0, 0, width, height, paint); 
    return bitmap; 
} 

在視圖的構造我創建了一個init()方法與folling代碼

PorterDuff.Mode mode = PorterDuff.Mode.SRC_IN; 
    Bitmap original = BitmapFactory.decodeResource(getResources(), R.drawable.blue_graph); 
    Bitmap mask = createMask(original.getWidth(), (int) ((original.getHeight()) * (1 - percentage))); 
    Bitmap result = drawWithPorterDuff(original, mask, mode); 
    imageView.setImageBitmap(result);