kotlin 如何将dp值转换为圆角半径的x和y浮点值?

lzfw57am  于 2023-03-13  发布在  Kotlin
关注(0)|答案(2)|浏览(124)

我正在创建12 dp圆角半径的虚线矩形。
我用画布来画,因为我们不能用dp或px来给予圆角半径。

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

我用35 f是因为它类似于12 dp,有没有办法使用dp,或者有没有办法把dp/px转换成浮点xy值?

0aydgbwb

0aydgbwb1#

Canvas与提供Density接口的DrawScope配合使用。
通过它,您可以使用**Dp.toPx()**函数:

Canvas(modifier = Modifier.fillMaxSize()) {
    val px = 12.dp.toPx()
    drawRoundRect(color = Color.Red,style = stroke, cornerRadius = CornerRadius(px))
}

ljsrvy3e

ljsrvy3e2#

  • dp* 是一个“屏幕上的一般大小”值。实际像素数取决于设备的屏幕密度--密度越高的屏幕在给定空间中填充的像素越多,因此给定的 dp 值将转换为更高的 px

密度因子可以从Resources得到:

context.resources.displayMetrics.density

该值将给予 dp-to-px 缩放器。(您需要该值,因为35f在hdpi屏幕上与xxxhdpi屏幕上看起来非常不同)
一旦你有了你的 px 值,你就可以直接使用它了,在你乘以density之后你会得到一个浮点数,但是如果你需要的话,你可以直接调用toInt(或者toFloat,如果你要反方向)。它们只是表达一个值的不同方式-重要的是值是正确的,它代表了正确的像素数等等,不管是100还是100f

相关问题