android - 将自定义视图调整到不同的屏幕
问题描述
我有一个Custom View
创建一个Path
. 我正在使用此函数将每个值从 dp 转换为 px:
private fun dpToPx(dp: Int): Int {
return TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dp.toFloat(),
resources.displayMetrics
).roundToInt()
}
这是我创建的方式Path
:
path = Path().apply {
moveTo(activity.windowManager.defaultDisplay.width.toFloat() + dpToPx(15), star.y + dpToPx(180))
lineTo(star.x, star.y + dpToPx(22))
}
这在我的手机上看起来不错,但是当我使用旧手机和不同屏幕的模拟器时,路径位置会出错。路径不是停留在 imageView 的中心 X/Y 上,而是更多地向左绘制。如果我使用 dp 值并根据显示指标进行转换,为什么它在不同设备上看起来不一样?
另外,我必须使用这个额外dpToPx(22)
的,lineTo
因为star.Y
它没有给我图像视图的中心 Y,它一直在中心 Y 上方绘制。我尝试使用star.bottom + star.height/2
,但它也没有给我中心 Y,所以我不得不找到一个随机的 dp 值,使路径一直到中心 Y。
我在另一个活动中遇到了这种情况,我在其中添加了多个具有预定义位置的图像视图,并且它们在我的手机中看起来都很好,但是使用模拟器,即使使用这个 dp 函数,许多图像视图也被绘制在屏幕限制之外。我还尝试了其他功能,但结果是一样的。