【发布时间】:2021-11-04 15:14:00
【问题描述】:
不是 Android 开发人员,而是在做个人项目,需要一些帮助。
我有一个尺寸为 1080 x 1444 像素的资产 sample.png。我正在创建一个自定义视图,onDraw() 对 sample.png 的位图和画布上的笑脸图标周围的矩形进行 darws。
这是在不同屏幕上创建视图时的外观。
屏幕 1:XXHDPI, 420, 2.625 (1080 x 2315 )
屏幕 2:XXXHDPI, 560, 3.5 (1440 x 3088 )
屏幕 3:XHDPI, 280, 1.75 (720 x 1544)
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val bitmap = AppUtils.loadAssetAsBitmap(context, "sample.png")
canvas.drawBitmap(bitmap, null, Rect(0, 0, width, height), paint)
canvas.drawRect(RectF(400f, 220f, 580f, 400f), paint)
canvas.drawRect(RectF(400f, 450f, 580f, 630f), paint)
canvas.drawRect(RectF(400f, 680f, 580f, 860f), paint)
}
问题在于使用硬编码的 Rect 坐标,这对于我针对屏幕 1 开发的设备效果很好,但由于密度和屏幕分辨率不同,因此不适用于其他屏幕 2 和 3。
我试图阅读和理解Support different pixel densities,但我仍然无法弄清楚我应该做什么。
sample.png 似乎在不同的屏幕上正确显示(很可能是 Android 正在缩放它,我不确定是否也应该为不同的密度提供 sample.png)。
如果有人可以建议我解决方案或提供示例,我将不胜感激。
谢谢。
【问题讨论】:
标签: android coordinates scaling screen-density