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

Bry*_*ard 38 android

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

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

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

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

Rom*_*Guy 35

笔画宽度以像素为单位定义(是的它是一个浮点数,使用像素分数没有问题:)

  • 我不相信罗曼的回答是正确的.在我目前的测试设备(HTC One X,密度为2.0)上,我发现必须调用`.setStrokeWidth()`,并将所需的笔划宽度除以1.5.然后,宽度应该是应该的.否则,它太宽了.1.5因子与Zzokk发现的一致(6px vs 9px),除了我质疑它是否与密度相关,因为One X是2.0而不是1.5.因此,这个1.5因素的起源让我感到困惑. (5认同)
  • 请注意,描边宽度受画布上附加的变换的影响。如果你调用canvas.scale(2.0f, 2.0f),描边宽度也会乘以2.0。 (2认同)

Ame*_*yaB 25

setStrokeWidth使用像素.所以要将dps转换为用于绘画的像素:

        int dpSize =  10;
        DisplayMetrics dm = getResources().getDisplayMetrics() ;
        float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpSize, dm);
        paint.setStrokeWidth(strokeWidth);
Run Code Online (Sandbox Code Playgroud)