Android canvas line strokeCap 圆比简单线大
Android canvas line strokeCap round larger than simple line
我正在尝试在我的 imageView 位图上绘制一条特定宽度的圆线。
所以我用 paintLine.strokeCap = Paint.Cap.ROUND
画了一条简单的线,没有这个选项。
这是结果:
第一个是圆形的,你可以看到它比下面的大。
这是我使用的代码。
val paintLine = Paint()
paintLine.color = Color.WHITE
paintLine.style = Paint.Style.FILL_AND_STROKE
paintLine.strokeWidth = 40.0f
paintLine.strokeCap = Paint.Cap.ROUND
val workingBitmap = Bitmap.createBitmap(bitmap)
val mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true)
val drawingBitmapCanvas = Canvas(mutableBitmap)
drawingBitmapCanvas.apply {
drawLine(300, 300, 400, 300, paintLine)
}
我想知道是否有办法让圆角线保持相同的宽度?
谢谢。
这只需要您掌握一点数学知识。添加到线条的圆形笔划帽具有 width/length 等于绘画笔划的一半。
这是我的代码:
Paint linePaint = new Paint();
Paint noCaplinePaint = new Paint();
public void init(){
linePaint.setColor(this.getResources().getColor(android.R.color.black));
linePaint.setStyle(Paint.Style.FILL_AND_STROKE);
linePaint.setStrokeWidth(40f);
linePaint.setStrokeCap(Paint.Cap.ROUND);
noCaplinePaint.setColor(this.getResources().getColor(android.R.color.black));
noCaplinePaint.setStyle(Paint.Style.FILL_AND_STROKE);
noCaplinePaint.setStrokeWidth(40f);
}
然后在onDraw
:
canvas.drawLine(50f, 40f, 300f, 40f, noCaplinePaint);
canvas.drawLine(70f, 81f, 280f, 81f, linePaint);
产生这些行:
所以,回顾一下,圆角线帽的大小可以这样计算:
additionalLengthFromRoundCap = lineStrokeWidth/2
并且这个上限将被添加到线的两端,因此线将比绘制的长 strokeWidth
个单位。
我正在尝试在我的 imageView 位图上绘制一条特定宽度的圆线。
所以我用 paintLine.strokeCap = Paint.Cap.ROUND
画了一条简单的线,没有这个选项。
这是结果:
第一个是圆形的,你可以看到它比下面的大。
这是我使用的代码。
val paintLine = Paint()
paintLine.color = Color.WHITE
paintLine.style = Paint.Style.FILL_AND_STROKE
paintLine.strokeWidth = 40.0f
paintLine.strokeCap = Paint.Cap.ROUND
val workingBitmap = Bitmap.createBitmap(bitmap)
val mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true)
val drawingBitmapCanvas = Canvas(mutableBitmap)
drawingBitmapCanvas.apply {
drawLine(300, 300, 400, 300, paintLine)
}
我想知道是否有办法让圆角线保持相同的宽度?
谢谢。
这只需要您掌握一点数学知识。添加到线条的圆形笔划帽具有 width/length 等于绘画笔划的一半。
这是我的代码:
Paint linePaint = new Paint();
Paint noCaplinePaint = new Paint();
public void init(){
linePaint.setColor(this.getResources().getColor(android.R.color.black));
linePaint.setStyle(Paint.Style.FILL_AND_STROKE);
linePaint.setStrokeWidth(40f);
linePaint.setStrokeCap(Paint.Cap.ROUND);
noCaplinePaint.setColor(this.getResources().getColor(android.R.color.black));
noCaplinePaint.setStyle(Paint.Style.FILL_AND_STROKE);
noCaplinePaint.setStrokeWidth(40f);
}
然后在onDraw
:
canvas.drawLine(50f, 40f, 300f, 40f, noCaplinePaint);
canvas.drawLine(70f, 81f, 280f, 81f, linePaint);
产生这些行:
所以,回顾一下,圆角线帽的大小可以这样计算:
additionalLengthFromRoundCap = lineStrokeWidth/2
并且这个上限将被添加到线的两端,因此线将比绘制的长 strokeWidth
个单位。