У меня есть 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))
}
Это хорошо выглядит на моем телефоне , но когда я использую эмулятор со старым телефоном и другим экраном, положение пути становится неправильным. Вместо того, чтобы оставаться в центре X / Y imageView, путь рисуется влево. Почему это не выглядит одинаково на разных устройствах, если я использую значения dp и конвертирую на основе метрик дисплея?
Кроме того, я должен использовать этот дополнительный dpToPx(22)
в lineTo
, потому что star.Y
не дает мне центр Y изображения, он продолжает рисовать выше центра Y. Я пытался использовать star.bottom + star.height/2
, но он также не дает мне центр Y, поэтому мне пришлось найти случайное значение dp, которое будет делать путь go до центра Y.
У меня такая ситуация в другом упражнении, где я динамически добавляю несколько изображений с предопределенными позициями, и все они хорошо смотрятся в моем телефоне, но с использованием эмулятор, многие изображения отображаются за пределами экрана, даже с использованием этой функции dp. Я также пробовал другие функции, но результаты те же.