Paint.setStrokeWidth() 方法使用的是什么单位?我是否需要根据当前屏幕密度来缩放该值?
这是一个浮点数值,所以我知道它不是像素数。它肯定是相对于某些东西的。
截至本篇文章撰写时,文档只有以下内容:
设置描边宽度。传递 0 以以发际线模式绘制轮廓。发际线总是独立于画布矩阵绘制单个像素。
Paint.setStrokeWidth() 方法使用的是什么单位?我是否需要根据当前屏幕密度来缩放该值?
这是一个浮点数值,所以我知道它不是像素数。它肯定是相对于某些东西的。
截至本篇文章撰写时,文档只有以下内容:
设置描边宽度。传递 0 以以发际线模式绘制轮廓。发际线总是独立于画布矩阵绘制单个像素。
描边宽度以像素为单位定义(是的,它是浮点数,并且使用像素分数没有问题 :))
setStrokeWidth使用像素。
因此,要将您的dps转换为绘画像素:
int dpSize = 10;
DisplayMetrics dm = getResources().getDisplayMetrics() ;
float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpSize, dm);
paint.setStrokeWidth(strokeWidth);
如果您想尝试绘制自己的"画布边框",请记住一件事情:onDraw
时即使描边也会被裁剪。因此,
paint.style = Paint.Style.STROKE
rect.set(0, 0, width, height)
paint.strokeWidth = 10F
canvas.drawRect(rect, paint)
strokeWidth = 20F
,然后您将“看到”一条10F的描边。]
.setStrokeWidth()
,这样宽度才能确切地达到目标值。否则,宽度将会太宽。这个1.5倍因子与Zzokk发现的结果完全一致(6像素和9像素),但我怀疑它是否与屏幕密度有关,因为One X的密度是2.0而不是1.5。因此,这个1.5倍因子的来源目前让我感到困惑。 - Trevor