Imagebutton android растянуть картинку

Подогнать изображение в ImageButton в Android

У меня есть 6 ImageButton в моей деятельности, я устанавливаю изображения через мой код в них (не используя xml).

Я хочу, чтобы они занимали 75% площади кнопок. Но когда некоторые изображения занимают меньшую площадь, некоторые слишком велики, чтобы поместиться в кнопку imageButton. Как программно изменить размер и показать их? Ниже скриншот

ниже находится xml-файл

и фрагмент myClass.java:

Я хочу, чтобы они занимали 75% площади кнопок.

Используйте android:padding=»20dp» (при необходимости измените отступы), чтобы контролировать, сколько изображения занимает кнопка.

но когда некоторые изображения занимают меньшую площадь, некоторые слишком велики, чтобы поместиться в кнопку imageButton. Как программно изменить размер и показать их?

Используйте, android:scaleType=»fitCenter» чтобы Android масштабировал изображения, и android:adjustViewBounds=»true» чтобы они корректировали свои границы из-за масштабирования.

Все эти атрибуты могут быть установлены в коде на каждом ImageButton во время выполнения. Тем не менее, на мой взгляд, гораздо проще установить и просмотреть в xml.

Кроме того, не используйте sp для чего-либо, кроме размера текста, оно масштабируется в зависимости от предпочтения размера текста, которое задает пользователь, поэтому ваши sp размеры будут больше, чем предполагалось, если у пользователя есть «большой» параметр текста. Используйте dp вместо этого, поскольку он не масштабируется предпочтением размера текста пользователя.

Вот фрагмент того, как должна выглядеть каждая кнопка:

Источник

ImageButton (Кнопка-изображение)

Общая информация

Находится в разделе Buttons.

Компонент ImageButton представляет собой кнопку с изображением (вместо текста). По умолчанию ImageButton похож на обычную кнопку.

В режиме дизайна изображение на кнопке определяется атрибутом android:src

Можно сделать двойной щелчок, чтобы сразу установить нужное свойство.

Методы

Программно можно установить изображения через различные методы.

setImageBitmap() Используется, чтобы указать в качестве изображения существующий экземпляр класса Bitmap setImageDrawable() Используется, чтобы указать в качестве изображения существующий экземпляр класса Drawable setImageResource() Используется, чтобы указать в качестве изображения существующий идентификатор ресурса (см. пример) setImageURI() Используется, чтобы указать в качестве изображения существующий адрес типа Uri. В некоторых случаях элемент кэширует изображение и после изменения изображения по прежнему выводит старую версию. Рекомендуется использовать инструкцию setImageURI(null) для сброса кэша и повторный вызов метода с нужным Uri

Примеры

С помощью метода setImageURI() можно обратиться к ресурсу типа Drawable по его идентификатору:

Например, можно задать путь Uri:

Можно обратиться к ресурсу по его типу/имени:

В этом случае код будет следующим:

Щелчок

Как и у обычной кнопки, интерес представляет только щелчок. В нашем примере мы будем менять поочередно картинки на кнопке (нужно подготовить две картинки в папке drawable)

Читайте также:  Андроид звонок с камерой

Теперь при каждом щелчке изображение на кнопке будет циклически переключаться между двумя картинками.

Продолжительное нажатие

Кроме обычного щелчка, в Android есть особый вид нажатия на кнопку — продолжительное нажатие. Это событие происходит, когда пользователь нажимает и удерживает кнопку в течение одной секунды. Этот тип нажатия обрабатывается независимо от обычного щелчка.

Для обработки продолжительного нажатия нужно реализовать класс View.OnLongClickListener и передать его в метод setOnLongClickListener(). Класс OnLongClickListener имеет один обязательный метод OnLongClick(). В принципе это похоже на метод OnClick(), только имеет возвращаемое значение.

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

Источник

Настройка размера ImageButton в Android

есть ли способ сделать это? Я попытался заполнить изображение и установить ширину / высоту представления, но ни один из них не работает. Вот пример:

Я хочу, чтобы кнопка была шире, чем она высока,но она выходит наоборот.

6 ответов

просто играл, чтобы попытаться понять вашу проблему.

кажется ImageButton — составное представление с несколькими предварительно заданными значениями. Например, какое-то поле, которое нельзя переопределить с помощью XML. Если вы не можете изменить свой образ в соответствии с тем, что вы хотите, то вам лучше создать свой собственный составной вид.

вот мой пример составного представления вы можете сделать сами:

и оригинальные кнопки:

здесь мы можем видеть пользовательское изображение / композит кнопки, за которым следует сборка в ImageButton как часть SDK:

Set android:background вместо android:src чтобы установить изображение на кнопке. Это позволит настроить изображение на размер кнопки. Затем отрегулируйте прокладку после.

вы не должны использовать sp в качестве размера размера-dp следует использовать, поскольку это поможет вашему масштабу просмотра непосредственно с различной плотностью экрана и разрешениями. Посмотреть Здесь для измерений.

padding будет отталкивать другие элементы от границы вашего вида. margin будет толкать содержимое вашего вида внутрь от вашей границы (т. е. раздавит доступное пространство для вашего изображения) . Граница определяется по высоте и ширине. Без дополнительной информации я бы угадайте, что вас смущают ваши поля-удалите их и поэкспериментируйте.

также полезно для вас: android:scaleType=»fitXY» делает растяжки изображения, чтобы соответствовать как X и y-размеры, которые доступны для него. Это поможет вам увидеть холст, доступный вашему изображению. Как только вы почувствуете, что область достаточно велика для правильного масштабирования изображения, измените тип масштаба на centerInside. Посмотреть Здесь для всех типов масштаба.

Я использую minWidth и minHeight свойства, в сочетании с fitXY тип масштаба и упаковка его содержимого для модуляции формы моей кнопки.

вы хотите сделать свою кнопку «шире», так, например, распечатав кнопку 200X100 из квадратного значка, вы можете выложить ее так:

можете ли вы объяснить свой вопрос более широко, чтобы мы могли больше понять.

согласно моему пониманию, вы хотите установить высоту/ширину ImageButton. Но это не работает, не так ли? Я хочу спросить вас, что, если вы пишете какую-либо конкретную высоту/ширину, то и это не работает?

Я скопировал ваш код в свои файлы, и я изменил высоту/ширину вручную, тогда он будет работать.

Читайте также:  Какие андроиды держат долго зарядку

пожалуйста, объясните свой вопрос.

Я закончил макет после ответа Грэма. Четыре «imageButton» фиксируют дно, ту же ширину, изменяемый размер изображения. спасибо!

Источник

ImageView

Общая информация

Компонент ImageView предназначен для отображения изображений. Находится в разделе Widgets.

Для загрузки изображения в XML-файле используется атрибут android:src, в последнее время чаще используется атрибут app:srcCompat.

ImageView является базовым элементом-контейнером для использования графики. Можно загружать изображения из разных источников, например, из ресурсов программы, контент-провайдеров. В классе ImageView существует несколько методов для загрузки изображений:

  • setImageResource(int resId) — загружает изображение по идентификатору ресурса
  • setImageBitmap(Bitmap bitmap) — загружает растровое изображение
  • setImageDrawable(Drawable drawable) — загружает готовое изображение
  • setImageURI(Uri uri) — загружает изображение по его URI

Метод setImageResource()

Сначала нужно получить ссылку на ImageView, а затем используется идентификатор изображения из ресурсов:

Метод setImageBitmap()

Используется класс BitmapFactory для чтения ресурса изображения в объект Bitmap, а затем в ImageView указывается полученный Bitmap. Могут быть и другие варианты.

Метод setImageDrawable()

Если у вас есть готовое изображение, например, на SD-карте, то его можно использовать в качестве объекта Drawable.

Drawable можно получить и из ресурсов, хотя такой код выглядит избыточным, если можно сразу вызвать setImageResource().

Метод setImageURI()

Берётся URI файла изображения и используется в качестве источника изображения. Этот способ годится для работы с локальными изображениями.

Загружаем Drawable через URI.

Другие методы

Также вам часто придется использовать методы, связанные с размерами и масштабированием: setMaxHeight(), setMaxWidth(), getMinimunHeight(), getMinimunWidth(), getScaleType(), setScaleType().

Масштабирование через свойство Scale Type

Для масштабирования картинки в ImageView есть свойство Scale Type и соответствующий ему атрибут android:scaleType и перечисление ImageView.ScaleType.

  • CENTER
  • CENTER_CROP
  • CENTER_INSIDE
  • FIT_CENTER
  • FIT_START
  • FIT_END
  • FIT_XY
  • MATRIX

Чтобы увидеть разницу между разными режимами, желательно использовать большую картинку, превосходящую по ширине экрана устройства. Допустим, у нас есть простенькая разметка:

Для наглядности я задал красный цвет для фона ImageView.

Режим android:scaleType=»center» выводит картинку в центре без масштабирования. Если у вас будет картинка большего размера, то края могут быть обрезаны.

Режим android:scaleType=»centerCrop» также размещает картинку в центре, но учитывает ширину или высоту контейнера. Режим попытается сделать так, чтобы ширина (или высота) картинки совпала с шириной (или высотой) контейнера, а остальное обрезается.

Режим android:scaleType=»centerInside» масштабирует картинку, сохраняя пропорции. Можно увидеть задний фон контейнера, если его размеры отличаются от размера картинки.

Режим android:scaleType=»fitCenter» (по умолчанию) похож на предыдущий, но может не сохранять пропорции.

Если выбрать режим android:scaleType=»fitStart», то картинка прижимается к левому верхнему углу и таким образом заполняет верхнюю половину контейнера.

Значение android:scaleType=»fitEnd» сместит картинку в нижнюю часть контейнера.

Режим android:scaleType=»fitXY» растягивает/сжимает картинку, чтобы подогнать её к контейнеру. Может получиться вытянутая картинка, поэтому будьте осторожны.

Последний атрибут android:scaleType=»matrix» вывел картинку без изменений в левом верхнем углу с обрезанными краями.

Атрибут android:adjustViewBounds=»true»

При использовании атрибута scaleType=»fitCenter» из предыдущего примера Android вычисляет размеры самой картинки, игнорируя размеры ImageView. В этом случае ваша разметка может «поехать». Атрибут adjustViewBounds заставляет картинку подчиниться размеру компонента-контейнера. В некоторых случаях это может не сработать, например, если у ImageView установлен атрибут layout_width=»0dip». В таком случае поместите ImageView в RelativeLayout или FrameLayout и используйте значение 0dip для этих контейнеров.

Читайте также:  Ярлык исчез с рабочего стола андроид

Загрузка изображения из галереи

Предположим, у вас есть на экране компонент ImageView, и вы хотите загрузить в него какое-нибудь изображение из галереи по нажатию кнопки:

Намерение ACTION_PICK вызывает отображение галереи всех изображений, хранящихся на телефоне, позволяя выбрать одно изображение. При этом возвращается адрес URI, определяющий местоположение выбранного изображения. Для его получения используется метод getData(). Далее для преобразования URI-адреса в соответствующий экземпляр класса Bitmap используется специальный метод Media.getBitmap(). И у нас появляется возможность установить изображение в ImageView при помощи setImageBitmap().

На самом деле можно поступить ещё проще и использовать метод setImageURI.

Сравните с предыдущим примером — чувствуете разницу? Тем не менее, приходится часто наблюдать подобный избыточный код во многих проектах. Это связано с тем, что метод порой кэширует адрес и не происходит изменений. Рекомендуется использовать инструкцию setImageURI(null) для сброса кэша и повторный вызов метода с нужным Uri.

В последних версиях системных эмуляторов два примера не работают. Проверяйте на реальных устройствах.

Получить размеры ImageView — будьте осторожны

У элемента ImageView есть два метода getWidth() и getHeight(), позволяющие получить его ширину и высоту. Но если вы попробуете вызвать указанные методы сразу в методе onCreate(), то они возвратят нулевые значения. Можно добавить кнопку и вызвать данные методы через нажатие, тогда будут получены правильные результаты. Либо использовать другой метод активности, который наступает позже.

Копирование изображений между ImageView

Если вам надо скопировать изображение из одного ImageView в другой, то можно получить объект Drawable через метод getDrawable() и присвоить ему второму компоненту.

Примеры

В моих статьях можно найти примеры использования ImageView.

Источник

Пример использования ImageButton в Android

В этой статье мы познакомимся с Android виджетом ImageButton . Рассмотрим пример использования и способы взаимодействия.

ImageButton — компонент для построения пользовательского интерфейса в Android. Он представляет собой кнопку с изображением. Виджет ImageButton представлен в Android классом android.widget.ImageButton , с которым мы сегодня и попрактикуемся.

Пример использования ImageButton в Android

Компонент ImageButton обладает всеми свойствами обычной кнопки, но имеет возможность использовать изображение вместо текста.

Это делается также, как и в виджете ImageView с помощью атрибута android:src . Давайте рассмотри пример разметки виджета в макете

Инициализировать в коде виджет тоже просто:

Android предоставляет несколько методов для работы с ImageButton :

  1. Метод setImageResource() используется при установке изображения по его id (например, в коде выше)
  2. Метод setImageBitmap() используется, если у вас уже есть экземпляр Bitmap, который вы хотите sустановить на ImageButton .
  3. Метод setImageDrawable() для установки изображения-экземпляра Drawable .
  4. Метод setImageURI() для установки изображения по известному Uri .

Установка слушателя и клики по виджету ImageButton происходят точно также, как и в Button.

Следите за обновлениями раздела Разработка под Андроид и подписывайтесь на обновления!

Источник

Оцените статью