Подтвердить что ты не робот

Android - Масштаб кнопки изображения

Я пытаюсь подобрать образ внутри ImageButton для тестирования, но способ ImageButton ведет себя не так, как ожидалось.

я сделал изображение 988x89 пикселей PNG и разместил его внутри ImageButton, который находится в пикселях с 7inches 1024x600. экран. ImageButton 988dp x 89dp, я знаю, что dp не совпадает с пикселями, но для этого разрешения я ожидал, что изображение будет достаточно масштабировать, чтобы занять большую часть ImageButton. Также я изменился на px вместо dp для тестирования, и это не имело никакого значения.

Но вместо этого ImageButton сделал изображение внутри него ОЧЕНЬ маленьким (синие линии являются границами ImageButton, а зеленая линия - индикацией выравнивания по центру).

Test Image 1

so question # 1: Почему ImageButton делает изображение таким большим, как это настолько мало, когда оно может заполнить большую часть экрана, даже если размер ImageButton очень широк?

Итак, чтобы преодолеть это, я выбрал adjustViewBounds, который ничем не отличался, что ставит вопрос №2: Почему? Не следует ли настраивать границы представления для настройки границ обзора?

Код до сих пор:

<ImageButton
        android:layout_width="988dp"
        android:layout_height="89dp"
        android:id="@+id/ibTest"
        android:src="@drawable/image_top_test"
        android:layout_centerHorizontal="true"
        android:adjustViewBounds="true"
        android:cropToPadding="false"
        android:layout_below="@+id/hlTopBar"
        android:background="#00000000" />

Поэтому позже я изменил scaleType на fitCenter, и изображение стало:

Test Image 2

Что странно и для меня, так как ImageButton имеет такое же соотношение сторон, как и изображение, поэтому я ожидал бы, что он будет соответствовать 100%, но он не подходит (есть разрыв в ширине с обеих сторон изображения).

Поэтому позже я изменил scaleType на fitXY, и я получил свой окончательный результат:

enter image description here

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

Итак, мой общий вопрос: (# 3): Какой правильный способ для установки изображения в Android, и ожидать, что он будет иметь обычный размер на экране, и почему масштабирование настолько грязное, и я это неправильно?

Я знаю, что есть проблемы с размерами экрана и dp и т.д., но масштабирование не ведет себя контролируемым образом, fitCenter делает овальное изображение, а fitXY слишком сильно зависит от меня, устанавливая соотношение правильного изображения на XY, поэтому я задаюсь вопросом, не делаю ли я что-то неправильно и как он должен быть правильным.

Окончательный код XML:

<ImageButton
        android:layout_width="988dp"
        android:layout_height="89dp"
        android:id="@+id/ibTest"
        android:src="@drawable/image_top_test"
        android:layout_centerHorizontal="true"
        android:adjustViewBounds="true"
        android:cropToPadding="false"
        android:layout_below="@+id/hlTopBar"
        android:background="#00000000"
        android:scaleType="fitXY" />
4b9b3361

Ответ 1

Хорошо, вы пытаетесь глубже проникнуть в реализации Android.

Ans # 3:

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

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/ibTest"
    android:src="@drawable/image_top_test"
    android:layout_centerHorizontal="true"
    android:adjustViewBounds="true"
    android:cropToPadding="false"
    android:layout_below="@+id/hlTopBar"
    android:background="#00000000"
    android:scaleType="fitXY" />

Ans # 1:

Почему ImageButton делает изображение таким большим, как это настолько мало, когда оно может заполнить большую часть экрана, даже если размер ImageButton очень широк?

Ответ аналогичен вышесказанному. Размер вашего изображения будет намного меньше, чем у Android OS, рассчитанного в зависимости от вашего упомянутого размера, с учетом разрешения устройства. Используйте http://coh.io/adpi/ (или http://density.brdrck.me/), чтобы сделать его простым для вычисления. Всегда принимайте mdpi в качестве стандарта или базы. Предположим, что ваш размер изображения составляет 988X89 в mdpi, это будет:

enter image description here Теперь, как будто вы пытаетесь просмотреть изображение 988px X 89px на экране xhdpi, где Android Os рассчитал размер изображения как 1976px X 178px, что намного больше, чем ваш размер изображения 988px X 89px. поэтому вы получаете небольшое изображение с большей площадью белого цвета.

Как его исправить? Перейдите по спецификациям Android для поддержки различных экранов плотности. это требует, чтобы вы создавали изображения специально для hdpi, mdpi, xhdpi и помещали их в соответствующие папки:

 MyProject/
     res/
       drawable-xhdpi/
           awesomeimage.png
       drawable-hdpi/
           awesomeimage.png
       drawable-mdpi/
           awesomeimage.png
       drawable-ldpi/
           awesomeimage.png

Ссылка: http://developer.android.com/training/multiscreen/screendensities.html для более подробной информации

Ответ 2

В действии Creat.. вы можете получить разрешение экрана... и изменить размер изображения в соответствии с экраном Widht и Height.. и установить изображение. Таким образом, ваше отношение будет одинаковым для всех типов устройств..

для изменения размеров изображений..: 1. Получить ширину и высоту экрана. 2. изображение в зависимости от разрешения экрана 3.set Image to view

Ответ 3

Вы также должны проверить, нет ли каких-либо дополнений вокруг вашего образа, я создал тот, который выглядел очень похоже на использование, и хотя fitXY работал, изменение размера изображения стало очень запутанным. Однако я тогда понял, что вокруг изображения все равно 100p, поэтому граница на расстоянии 100 dp от каждого края изображения.