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)与论坛网站不同,我们不使用“谢谢”或“感谢任何帮助”或签名。顺便说一句,这是“提前感谢”,而不是“提前感谢”。