Перейти к содержимому

Как установить картинку на кнопку android studio

  • автор:

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

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

ImageButton

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

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

Source for ImageButton

Методы

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

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

Примеры

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

android.resource://[пакет]/[идентификатор ресурса]

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

 Uri uri = Uri.parse("android.resource://ru.alexanderklimov.imagebuttondemo/" + R.drawable.cat); 

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

android.resource://[пакет]/[тип ресурса]/[имя ресурса]

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

 Uri uri = Uri.parse("android.resource://ru.alexanderklimov.imagebuttondemo/drawable/cat"); imageButton.setImageUri(uri); 

Щелчок

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

 . ImageButton imageButton; boolean flag = true; imageButton.setOnClickListener(new View.OnClickListener() < public void onClick(View v) < // меняем изображение на кнопке if (flag) imageButton.setImageResource(R.drawable.cutecat4); else // возвращаем первую картинку imageButton.setImageResource(R.drawable.cutecat2); flag = !flag; >>); 

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

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

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

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

 imageButton.setOnLongClickListener(new OnLongClickListener() < @Override public boolean onLongClick(View v) < Toast toast = Toast.makeText(getApplicationContext(), "Long Click", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); return false; >>); 

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

Как сделать кнопку с картинкой и текстом в андроид?

Как можно сделать кнопку и рядом картинку, например, как в приложение ВК или Инстаграм.
Я делал так:
1) взял картинку отсюда PNG : https://www.google.com/design/icons/
2) создал обычный Button в LinearLayout
3) Задал ему text, padding, drawableLeft: myPng

вроде бы ничего и неплохо даже смотрится, теперь есть проблема
У гугла вроде бы написано, что эти картинки могут менять цвет:
То есть я могу сделать так, что после нажатия на эту кнопку, она стала красной как в Инстаграмме. кнопка лайка(мне нравится)

P.S. Возможно даже посоветуете какие-нибудь советы, как правильно писать это. Или есть репозитории открытые подбных приложений

  • Вопрос задан более трёх лет назад
  • 6598 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 2

VYakushev

Разработчик Android в Nowtaxi

У Google достаточно вроде понятно написано как добавить картинки на кнопку: developer.android.com/intl/ru/guide/topics/ui/cont. Если же говорить о кнопке, которая в зависимости от состояния меняет свой внешний вид, то мне кажется тут нужно модифицировать внешний вид Checkbox. Думаю, что этот вариант вам поможет: stackoverflow.com/questions/3192173/change-icons-o.

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать

Нужен селектор, Карл! Делаешь два layer_list один на нажатое состояние с одной картинкой, другой на нормальное состояние. Из всего этого лупишь селектор, и назначаешь на фон кнопки.

Ответ написан более трёх лет назад
Vladislav @Div100 Автор вопроса
Спасибо, а переключать как? Это состояние из кода?

как тол ко вы это назначите на фон все будет переключаться само

Ваш ответ на вопрос

Войдите, чтобы написать ответ

android

  • Android
  • +1 ещё

Как корректно реализовать Базу данных в приложении на Андроид?

  • 1 подписчик
  • 10 часов назад
  • 28 просмотров

Android — как правильно добавлять картинку на button

Имеется png картинка и цель — добавить её на button. Проблема в том, что если добавляю через @android:background кнопки, то картинка становится с лесенками (как будто антиалиазинг выключен), либо становится мутной. Если использую разметку ниже, то вообще картинка не показывается, остаются только границы на button.

Имеются предоположения, что неправильно добавляю png в проект. Добавляю через res->new->image asset Исправил, теперь всё работает

Картинку перемещаю вручную в папку res/drawable-hdpi Только есть небольшая проблема, что селектор android:state_pressed=»true» всё равно отказывается работать

Отслеживать
JaktensTid
задан 16 июн 2016 в 18:04
JaktensTid JaktensTid
549 1 1 золотой знак 5 5 серебряных знаков 19 19 бронзовых знаков
Пробовали ImageButton ?
16 июн 2016 в 18:08
Сейчас попробую
16 июн 2016 в 18:13
Всё равно не выходит
16 июн 2016 в 18:23
А куда вы выставляете картинку? в android:background или android:src ?
16 июн 2016 в 18:38

тогда наверно неправильно добавили картинку. Нужно просто скопировать в папку нужной плотнисти, например drawable-xhdpi

16 июн 2016 в 18:51

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

По описанию проблема в том, что нет ресурса с достаточным качеством картинки. Либо ресурс с соответствующим квалификатором отсутствует вовсе (например res/drawable-xxhdpi/), либо хранящееся в нем изображение имеет низкое качество — собственный размер в пикселях мал для данного разрешения или достаточный размер, но неудачный скалинг, то есть размер нормальный, но в результате обработки по увеличению получилась хрень вместо четкой картинки.
Так, для экрана плотностью XXHDPI (~480dp) изображение для стандартной иконки (размер 48x48dp) должно иметь абсолютные геометрические размеры 144×144 пикселя с содержимым соответствующего качества (подробнее смотрите офф.документацию).

В первом случае недостающие ресурсы нужно создать, во втором посмотреть, что там за изображения вообще лежат и привести их в соответствие.

PS: селектор у вас составлен неверно. В конце селектора должен быть айтем для вида по умолчанию, который не имеет никаких стейтов (в вашем случае вместо должен быть просто и располагаться самым последним в иерархии айтемов. Выбор айтема в селекторе производится по следующему алгоритму: проверяется условие стейта первого айтема, если совпадает, то он выводится и селектор заканчивает работу, иначе переходит ко второму айтем и проверяет его условие и так далее, если ни одно из условий не выполняется последним выполняется айтем без условий, который содержит, как правило, нормальный вид (состояние без всяких нажатий, фокусов, селекторов и тд).
Картинку в селекторе не видно, потому что ее закрывает shape — фигуры не прозрачные по умолчанию. Смотрите, например этот ответ (вторая часть) по созданию вида из наложения картинки и шейпа.

Работа с изображениями

Одним из наиболее распространенных источников ресурсов являются файлы изображений. Android поддерживает следующие форматы файлов: .png (предпочтителен), .jpg (приемлем), .gif (нежелателен). Для графических файлов в проекте уже по умолчанию создана папка res/drawable . По умолчанию она уже содержит ряд файлов — пару файлов иконок:

Работа с изображениями в Android

При добавлении графических файлов в эту папку для каждого из них Android создает ресурс Drawable . После этого мы можем обратиться к ресурсу следующим образом в коде Java:

R.drawable.имя_файла
@[имя_пакета:]drawable/имя_файла

Например, добавим в проект в папку res/drawable какой-нибудь файл изображения. Для этого скопируем на жестком диске какой-нибудь файл с расширением png или jpg и вставим его в папку res/drawable (для копирования в проект используется простой Copy-Paste)

Далее нам будет предложено выбрать папку — drawable или drawable-24 . Для добавления обычных файлов изображений выберем drawable :

Добавление изображений в папку drawable Android Studio

Здесь сразу стоит учесть, что файл изображения будет добавляться в приложение, тем самым увеличивая его размер. Кроме того, большие изображения отрицательно влияют на производительность. Поэтому лучше использовать небольшие и оптимизрованные (сжатые) графические файлы. Хотя, также стоит отметить, что все файлы изображений, которые добавляются в эту папку, могут автоматически оптимизироваться с помощью утилиты aapt во время построения проекта. Это позволяет уменьшить размер файла без потери качества.

При копировании файла нам будет предложено установить для него новое имя.

Ресурсы drawable в Android и Java

Можно изменить название файла, а можно оставить так как есть. В моем случае файл называется dubi2.png . И затем нажмем на кнопку Refactor. И после этого в папку drawable будет добавлен выбранный нами файл изображения.

Добавление изображений в Android Studio

Для работы с изображениями в Android можно использовать различные элементы, но непосредственно для вывода изображений предназначен ImageView . Поэтому изменим файл activity_main.xml следующим образом:

В данном случае для отображения файла в ImageView у элемента устанавливается атрибут android:src . В его значении указывается имя графического ресурса, которое совпадает с именем файла без расширения. И после этого уже в Preview или в режиме дизайнере в Android Studio можно будет увидеть применение изображения, либо при запуске приложения:

ImageView и drawable в Android Studio и Java

Если бы мы создавали ImageView в коде java и из кода применяли бы ресурс, то activity могла бы выглядеть так:

package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); ConstraintLayout constraintLayout = new ConstraintLayout(this); ImageView imageView = new ImageView(this); // применяем ресурс imageView.setImageResource(R.drawable.dubi2); ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams (ConstraintLayout.LayoutParams.WRAP_CONTENT , ConstraintLayout.LayoutParams.WRAP_CONTENT); layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; imageView.setLayoutParams(layoutParams); constraintLayout.addView(imageView); setContentView(constraintLayout); >>

В данном случае ресурс drawable напрямую передается в метод imageView.setImageResource() , и таким образом устанавливается изображение. В результате мы получим тот же результат.

imageView.setImageResource(R.drawable.dubi2);

Однако может возникнуть необходимость как-то обработать ресурс перед использованием или использовать его в других сценариях. В этом случае мы можем сначала получить его как объект Drawable и затем использовать для наших задач:

package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.res.ResourcesCompat; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); ConstraintLayout constraintLayout = new ConstraintLayout(this); ImageView imageView = new ImageView(this); Resources res = getResources(); Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.dubi2, null); // применяем ресурс imageView.setImageDrawable(drawable); ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams (ConstraintLayout.LayoutParams.WRAP_CONTENT , ConstraintLayout.LayoutParams.WRAP_CONTENT); layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; imageView.setLayoutParams(layoutParams); constraintLayout.addView(imageView); setContentView(constraintLayout); >>

Для получения ресурса применяется метод ResourcesCompat.getDrawable() , в который передается объект Resources, идентификатор ресурса и тема. В данном случае тема нам не важна, поэтому для нее передаем значение null. Возвращается ресурс в виде объекта Drawable :

Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.dubi2, null);

Затем, например, можно также передать ресурс объекту ImageView через его метод setImageDrawable()

imageView.setImageDrawable(drawable);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *