Paint.setStrokeWidth()使用什么度量单位?

时间:2011-01-25 03:52:34

标签: android

Paint.setStrokeWidth()使用什么度量单位?是否需要根据当前屏幕密度缩放此值?

这是一个浮点值,所以我知道它不是一个像素数。它必须与某事有关。

这是撰写本文时所说的所有文件:

  

设置抚摸的宽度。在发际线模式下将0传递到笔划。 Hairlines总是绘制一个独立于canva矩阵的像素。

3 个答案:

答案 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。]