Настройте пользовательский вид на разные экраны - PullRequest
0 голосов
/ 30 марта 2020

У меня есть 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. Я также пробовал другие функции, но результаты те же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...