Android - изменить размер изображения в соответствии с высотой экрана

1

В моем приложении, на фоне Relative Layout, у меня очень большой сетчатый фон (больше, чем любой экран телефона/таблицы). Поэтому мне было интересно, вместо того, чтобы андроид изменил его размер и заставил его выглядеть ужасно, я мог бы изменить его размер самостоятельно. Я хочу изменить размер изображения (как по вертикали, так и по горизонтали, чтобы он выглядел прилично), пока изображение и высота экрана не совпадут.

Спасибо, вся помощь appreciated- Lijap

  • 0
    использовать imgview.setScaleType (ScaleType.FIT_XY);
Теги:
background-image
image
relativelayout
resize

3 ответа

2
Лучший ответ

Решение этого - это то, к чему Google приложил немало усилий.

По существу, вы должны создавать разные размеры для каждого из ваших целевых размеров/макетов.

Это дает обширные объяснения (гораздо лучше, чем я мог бы дать) в документах Google Dev Guide для поддержки нескольких экранов

С этой страницы:

Размер экрана

Фактический физический размер, измеренный как диагональ экрана. Для простоты Android группирует все фактические размеры экрана в четыре обобщенных размера: маленький, нормальный, большой и очень большой.

Плотность экрана

Количество пикселей в физической области экрана; обычно называемый dpi (точек на дюйм).

Например, экран с низкой плотностью имеет меньше пикселей в заданной физической области по сравнению с экраном с "нормальной" или "высокой" плотностью. Для простоты Android группирует все фактические плотности экрана в четыре обобщенные плотности: низкий, средний, высокий и сверхвысокий.

ориентация

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

разрешение

Общее количество физических пикселей на экране. При добавлении поддержки нескольких экранов приложения не работают напрямую с разрешением; приложения должны касаться только размера экрана и плотности, как это определено обобщенными группами размеров и плотности.

Независимый от плотности пиксель (dp)

Виртуальный пиксельный блок, который следует использовать при определении макета пользовательского интерфейса, чтобы выразить размеры или положение макета независимо от плотности. Независимый от плотности пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который представляет собой базовую плотность, принимаемую системой для экрана средней плотности. Во время работы система прозрачно обрабатывает любое масштабирование блоков dp по мере необходимости, исходя из фактической плотности используемого экрана. Преобразование блоков dp в пиксели экрана просто: px = dp * (dpi/160). Например, на экране с разрешением 240 точек на дюйм 1 дп равен 1,5 физическим пикселям. Вы всегда должны использовать модули dp при определении пользовательского интерфейса приложения, чтобы обеспечить правильное отображение вашего интерфейса на экранах с различной плотностью.

Таким образом, ваши пользователи будут смотреть на растровое изображение, соответствующее их размеру устройства.

Пожалуйста, дайте мне знать, если вам нужна помощь в понимании документа, или если это не отвечает на ваш вопрос.

  • 0
    Итак ... Просматривая то, что я видел это: большие экраны x как минимум 960dp x 720dp большие экраны как минимум 640dp x 480dp нормальные экраны как минимум 470dp x 320dp маленькие экраны как минимум 426dp x 320dp, что означает для ldpi и т. Д. Я должен сделать изображение этих разрешений
  • 0
    Да, это правильно. Таким образом, вы хотите создать отдельные растровые изображения для каждого из тех размеров, на которые вы хотите ориентироваться. Это позволит вам протестировать его для каждого устройства в эмуляторе или на устройстве с таким макетом. \
Показать ещё 4 комментария
0

Ответ Pheonixblade9 правильный, но если вы решите сделать некоторые изменения размера, то вы можете реализовать метод onSizeChanged() класса ImageView. Обратите внимание, однако onSizeChanged() - из класса Super-Class, View.

0

если изображение слишком велико (особенно если оно больше любого разрешения), вы можете получить ошибку OOM (из памяти).

в таких случаях вы должны быть эффективными с точки зрения памяти, а google опубликовала несколько руководств по этой проблеме.

см.: http://developer.android.com/training/displaying-bitmaps/index.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню