如何将dp值转换为x和y浮点值以用于圆角半径?

3

我正在创建一个12 dp圆角的虚线矩形。

我正在使用画布进行操作,但我们无法在其中以dp或px方式指定圆角半径。

  Canvas(modifier = Modifier.fillMaxSize()) {
            drawRoundRect(color = Color.Red, style = stroke, cornerRadius = CornerRadius(35f, 35f))
        }

我使用35f是因为它类似于12 dp。是否有办法使用dp或将dp / px转换为float xy值的方法?


1
你试过 12.dp.toPx() 吗? - undefined
1
是的,它正在工作。 - undefined
2个回答

4
CanvasDrawScope 协作,提供了一个 Density 接口。
借助这个接口,您可以使用Dp.toPx() 函数:
Canvas(modifier = Modifier.fillMaxSize()) {
    val px = 12.dp.toPx()
    drawRoundRect(color = Color.Red,style = stroke, cornerRadius = CornerRadius(px))
}

enter image description here


1
哦,我没注意到这是一个撰写问题。太棒了! - undefined

1

dp 是“屏幕上的一般尺寸”值。实际像素数量取决于设备的屏幕密度 - 高密度屏幕将更多的像素压缩到给定空间中,因此给定的 dp 值将转换为更高的 px 值。

您可以从 Resources 中获取该密度因子:

context.resources.displayMetrics.density

并且该值将为您提供您的 dp-to-px 比例尺。 (您需要这样做,因为在hdpi屏幕上, 35f 与xxxhdpi屏幕上看起来非常不同)。
一旦您有了 px 值,您就可以直接使用它。 在乘以密度后,您将获得一个浮点数,但是如果需要,您可以调用 toInt (或者如果您走另一条路线,则调用 toFloat )。 它们只是表示值的不同方式-重要的是该值是正确的,它代表正确数量的像素等,无论是 100 还是 100f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接