Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Paint.setStrokeWidth()使用什么度量单位?_Android - Fatal编程技术网

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

Android Paint.setStrokeWidth()使用什么度量单位?,android,Android,Paint.setStrokeWidth()使用什么度量单位?是否需要根据当前屏幕密度缩放此值 它是一个浮点值,所以我知道它不是一个像素数。它一定是和什么有关的 以下是截至撰写本文时的所有文档: 设置笔划的宽度。在发际线模式下将0传递给笔划。发际线始终绘制一个独立于canva矩阵的像素 笔划宽度是以像素为单位定义的(是的,它是一个浮点,使用像素分数没有问题:)setStrokeWidth使用像素。 因此,要将dps转换为用于绘制的像素,请执行以下操作: int dpSize =

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

它是一个浮点值,所以我知道它不是一个像素数。它一定是和什么有关的

以下是截至撰写本文时的所有文档:

设置笔划的宽度。在发际线模式下将0传递给笔划。发际线始终绘制一个独立于canva矩阵的像素


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

setStrokeWidth使用像素。 因此,要将dps转换为用于绘制的像素,请执行以下操作:

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

如果您试图
onDraw
您自己的“画布边框”,需要记住的一点是,即使笔划也会被剪裁。所以

将导致“边界”仅为5F宽。这是因为笔划位于矩形的中心,在本例中,矩形是画布的边缘,导致一半笔划在画布之外时被剪裁


要解决这个问题,只需将所需的边界厚度乘以2即可。[在上面的例子中,你设置了
strokeWidth=20F
,你会“看到”一个10F的笔划。]

嗨,罗曼,我尝试了ApiDemos的PathEffect例子,笔划宽度设置为6。当我在hdpi手机屏幕上测量宽度时,它是9px。看起来,初始笔划宽度值与密度相乘。为了得到真实的宽度,我应该提供除以密度的值吗?我不相信罗曼的答案是正确的。在我当前的测试设备(HTC One X,密度为2.0)上,我发现调用
.setStrokeWidth()
时必须将所需的笔划宽度除以1.5。然后,宽度正好是它应该的宽度。否则,它太宽了。1.5因子与Zzokk的发现(6px对9px)完全一致,但我怀疑它是否与密度有关,因为X是2.0,而不是1.5。所以这个1.5因子的起源现在让我很困惑。该死!!我来这里只是为了解决这个疑问。我看到@Romain Guy在回答,我想“我们肯定有答案”,但在评论中,这似乎并不容易。不管怎样,我试着处理它,就像它的像素从dp转换为像素一样。。。而且它似乎适用于不同的屏幕大小…你们是否关闭了反别名功能?请注意,如果您期望1像素宽的线条、矩形笔划。。。您需要关闭反别名。请注意,笔划宽度受连接到画布的变换的影响。如果调用canvas.scale(2.0f,2.0f),笔划宽度也将乘以2.0。或者,您可以将值粘贴在-dimens.xml中的所属位置,然后简单地执行以下操作:paint.setStrokeWidth(getContext().getResources().getDimensionPixelSize(R.dimen.stroke_width));这仍然不起作用,我的笔划在不同的设备上看起来都不一样,任何人都可以修复它???@slott该值可以动态计算,因此它不会出现在dimens.xml中。谢谢!这正是我想知道的,我试图画一个1dp的矩形,但它看起来太窄了。我想不出来,但这可以解释。实际上相当令人困惑。。。
paint.style = Paint.Style.STROKE
rect.set(0, 0, width, height)
paint.strokeWidth = 10F
canvas.drawRect(rect, paint)