2012-06-24 5 views
1

Мое приложение для Android отлично смотрится с разрешением 480x800 пикселей, но оно ломается на экране LDPI с разрешением 240x400 пикселей. Я знаю, что могу получить коэффициент масштабирования экрана в активности, используя getResources().getDisplayMetrics().density, который даст точное значение float в зависимости от разрешения экрана.Как использовать коэффициент масштабирования DPI (float) для установки полей (int)

В моем приложении, я использовал RelativeLayout и ImageView сек в нем, и установить границы изображений с использованием setMargins(), так как этот метод использует пиксели в int для его сверху, слева, снизу и справа значений, как я могу установить эти значения с использованием коэффициента DPI, который я получил? (который является поплавком). У нас есть Math.floor(), но я позиционирую изображения в очень определенных местах с использованием пикселей, а коэффициент DPI, возвращаемый методом, имеет очень специфическое значение в десятичных разрядах, которые нельзя игнорировать, поэтому отбрасывание до int не работает для меня.

Update

Кроме того, я использую lp.setMargins(100,200,0,0);, чтобы установить поля, какие изменения я буду делать в нем использовать DPI фактор I полученый из устройства?

P.S. Я знаю, что это скорее математическая проблема, а не программирование, но я бедна математикой, извините.

ответ

7

Похоже, я был слишком ранним, чтобы задать вопрос, вместо того, чтобы возиться с самим собой, но также заметил, что я не ВСЕ, первым, кто столкнулся с этой проблемой.

Итак, вот решение, которое я нашел.

В классе Activity я создал следующий метод.

private int px(float dips) 
{ 
    float DP = getResources().getDisplayMetrics().density; 
    return Math.round(dips * DP); 
} 

Это преобразует данное значение dp в соответствующие пиксели. Вы можете сделать переменную DP, используемую в методе глобальной, и инициализировать ее в вашем методе onCreate(), а не в пределах px(), чтобы ускорить выполнение метода.

Использование:

lp.setMargins(px(100),px(200), 0, 0); 

ИЛИ, если вы не создаете px() только для этого и есть DP как глобальные.

lp.setMargins(100 * Math.round(DP), 200 * Math.round(DP), 0, 0); 

Однако, используя метод, он выглядит намного чище и удобочитаемым. :-)