Java 绘制一个部分动态填充的圆
我想玩帆布。我可以画一些三角形,部分填充,画一条路径,然后画出来。我用路径,点和线。记住三角学是一个很好的练习。现在,我想用一个圆做同样的事情,正如你在下面看到的。我想设置一个百分比,并填充这个圆,直到圆的高度*百分比。我怎么能用画布或画笔画出那样的圆呢Java 绘制一个部分动态填充的圆,java,android,android-canvas,Java,Android,Android Canvas,我想玩帆布。我可以画一些三角形,部分填充,画一条路径,然后画出来。我用路径,点和线。记住三角学是一个很好的练习。现在,我想用一个圆做同样的事情,正如你在下面看到的。我想设置一个百分比,并填充这个圆,直到圆的高度*百分比。我怎么能用画布或画笔画出那样的圆呢 你应该换一种想法。我的方法是画一个彩色矩形(其中高度是圆预期高度的百分比),然后用一个圆裁剪它。answer解释了如何将图像裁剪成圆形(我宁愿在这里链接而不是重新键入代码)。我终于做到了。我创建了两种方法。正如罗斯特所建议的,我创建了一个白色矩
你应该换一种想法。我的方法是画一个彩色矩形(其中高度是圆预期高度的百分比),然后用一个圆裁剪它。answer解释了如何将图像裁剪成圆形(我宁愿在这里链接而不是重新键入代码)。我终于做到了。我创建了两种方法。正如罗斯特所建议的,我创建了一个白色矩形作为遮罩,其中的高度是圆形预期高度的百分比
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;
}
在视图的构造函数中,我用folling代码创建了一个init()方法
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);
您可以使用
drawArc()
和设置paint.setStyle(paint.Style.FILL)代码>与论坛网站不同,我们不使用“谢谢”或“感谢任何帮助”或签名。顺便说一句,这是“提前感谢”,而不是“提前感谢”。