Android 用不同的边框颜色画圆圈
这段代码画了一个带白色边框的圆,但是我希望边框的一部分是黑色的,另一部分是白色的。40%是黑色,60%是白色 如何做到这一点?试试这段代码Android 用不同的边框颜色画圆圈,android,Android,这段代码画了一个带白色边框的圆,但是我希望边框的一部分是黑色的,另一部分是白色的。40%是黑色,60%是白色 如何做到这一点?试试这段代码 public static Bitmap drawCircle(int width,int height, int borderWidth) { Bitmap canvasBitmap = Bitmap.createBitmap( width, height, Bitmap.Config.ARGB_8888); BitmapShader sh
public static Bitmap drawCircle(int width,int height, int borderWidth) {
Bitmap canvasBitmap = Bitmap.createBitmap( width, height, Bitmap.Config.ARGB_8888);
BitmapShader shader = new BitmapShader(canvasBitmap, TileMode.CLAMP,
TileMode.CLAMP);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(shader);
paint.setShader(null);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.WHITE);
paint.setStrokeWidth(borderWidth);
Canvas canvas = new Canvas(canvasBitmap);
float radius = width > height ? ((float) height) / 2f : ((float) width) / 2f;
canvas.drawCircle(width / 2, height / 2, radius - borderWidth / 2, paint);
return canvasBitmap;
}
这里有一种实用的方法,用一种颜色填充一个圆,用另一种颜色抚摸圆的边框 使用第二种方法传入现有的Paint实例,例如设置反别名标志或在onDraw()期间阻止内存分配
只需使用一种颜色以全尺寸绘制圆,然后在同一坐标处再次绘制圆,但使用不同的颜色和较小的半径,并按需要缩小半径,这将是最简单的方法。您正在进行中。绘制两条圆弧,而不是绘制圆。一个是白色的,另一个是黑色的。请参见
canvas.drawArc(…)
。做一些简单的数学…我很可能;y在drawarc参数方面有问题,例如,这不会向我绘制任何东西RectF rect=new RectF(10,10,10,10);画布。drawArc(rect,0180,true,paint);
class MyView extends View
{
private Paint paint;
public MyView(Context context, int x, int y)
{
super(context);
paint = new Paint();
// PorterDuffXfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
paint.setAlpha(255);
// paint.setXfermode(xfermode);
paint.setAntiAlias(true);
// setBackgroundColor(Color.BLACK);
}
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawCircle(100, 100, 50, paint);
}
}
public static void fillCircleStrokeBorder(
Canvas c, float cx, float cy, float radius,
int circleColor, float borderWidth, int borderColor) {
fillCircleStrokeBorder(c, cx, cy, radius, circleColor, borderWidth, borderColor, new Paint());
}
public static void fillCircleStrokeBorder(
Canvas c, float cx, float cy, float radius,
int circleColor, float borderWidth, int borderColor, Paint p) {
int saveColor = p.getColor();
p.setColor(circleColor);
Paint.Style saveStyle = p.getStyle();
p.setStyle(Paint.Style.FILL);
c.drawCircle(cx, cy, radius, p);
if (borderWidth > 0) {
p.setColor(borderColor);
p.setStyle(Paint.Style.STROKE);
float saveStrokeWidth = p.getStrokeWidth();
p.setStrokeWidth(borderWidth);
c.drawCircle(cx, cy, radius - (borderWidth / 2), p);
p.setStrokeWidth(saveStrokeWidth);
}
p.setColor(saveColor);
p.setStyle(saveStyle);
}