首页 > 解决方案 > 将自定义视图调整到不同的屏幕

问题描述

我有一个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 函数,许多图像视图也被绘制在屏幕限制之外。我还尝试了其他功能,但结果是一样的。

标签: androidandroid-layoutkotlinandroid-activityandroid-custom-view

解决方案


推荐阅读