Paint.setStrokeWidth()使用什么度量单位?是否需要根据当前屏幕密度缩放此值?
这是一个浮点值,所以我知道它不是一个像素数。它必须与某事有关。
这是撰写本文时所说的所有文件:
设置抚摸的宽度。在发际线模式下将0传递到笔划。 Hairlines总是绘制一个独立于canva矩阵的像素。
答案 0 :(得分:34)
笔画宽度以像素为单位定义(是的,它是一个浮点数,使用像素分数没有问题:)
答案 1 :(得分:22)
setStrokeWidth使用像素。 所以要将dps转换为用于绘画的像素:
int dpSize = 10;
DisplayMetrics dm = getResources().getDisplayMetrics() ;
float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpSize, dm);
paint.setStrokeWidth(strokeWidth);
答案 2 :(得分:1)
如果要尝试onDraw
自己的“画布边界”,请记住一件事,就是即使笔划也被剪掉。所以
paint.style = Paint.Style.STROKE
rect.set(0, 0, width, height)
paint.strokeWidth = 10F
canvas.drawRect(rect, paint)
将导致仅5F宽的“边界”。这是因为笔触在矩形上居中,在这种情况下,矩形是画布的边缘,导致笔画的一半实际上在画布的外面被剪切了。
要解决此问题,只需将所需的边界厚度乘以2。[在上面的示例中,您将strokeWidth = 20F
设置为“看到” 10F。]