Рисование "рисования" на холсте в единицах дп - PullRequest
5 голосов
/ 18 июня 2011

Я пытаюсь выяснить, есть ли способ рисовать растровые изображения на холсте в единицах dp вместо пикселей.Например: следующий код масштабирует масштабируемое изображение до 100 * 100 пикселей.Как я могу вместо этого сделать 100 * 100 дп?

int lengthPos = 10;
int heightPos = 10
mImage.setBounds(lengthPos, heightPos, (lengthPos + 100), (heightPos + 100));
mImage.draw(c);

Кроме того, я не уверен, каковы единицы измерения для щелчков на экране, но они не совпадают с пикселями на экране, что затрудняет определение, когда выбирается рисование (Вам нужно угадать, где щелкнуть, чтобы выбрать объект для рисования. Могу ли я также масштабировать координаты клика до dp? Не кажется, что это будет слишком сложно, особенно потому, что координаты щелчка экрана хранятся в локальной переменной для обработки в моем приложении.

Другими словами, мне нужно подобрать масштабирование, чтобы при щелчке по координатам 250, 250 пиксели отображались при 250, 250 на нескольких плотностях экрана.

Ответы [ 3 ]

8 голосов
/ 18 июня 2011

Соотношение dp / dx равно dpi / 160 вашего устройства, поэтому вы можете легко рассчитать провалы таким образом.

Использовать

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float density = dm.density

См. Ссылку для получения более подробной информации: http://developer.android.com/reference/android/util/DisplayMetrics.html

3 голосов
/ 14 февраля 2015
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;

Источник (@Romain Guy)

1 голос
/ 18 июня 2011

Вы не можете напрямую, но вы можете конвертировать между px и dp. См. Ответ в этой связанной статье StackOverflow для получения подробной информации.

...