Android buttons on imageview

Как я могу дать эффект щелчка imageview, как кнопка на Android?

У меня есть imageview в моем Android-приложении, которое я использую как кнопку с событием onClick, но, как вы можете догадаться, он не дает imageview кликабельный эффект при нажатии. Как я могу этого достичь?

29 ответов

вы можете создавать различные изображения для состояний clicked / not clicked и устанавливать их в onTouchListener следующим образом

лучший выбор заключается в том, что вы определяете селектор следующим образом

и выберите изображение в случае:

вы можете сделать это с помощью одного изображения, используя что-то вроде этого:

Я, вероятно, сделаю это подклассом ImageView (или ImageButton, поскольку это также подкласс ImageView) для более легкого повторного использования, но это должно позволить вам применить «выбранный» вид к imageview.

Это можно сделать с только один файл изображения использование метода ColorFilter. Однако ColorFilter рассчитывает работать с ImageViews, а не с кнопками, поэтому вам нужно преобразовать кнопки в ImageViews. Это не проблема, если вы используете изображения в качестве кнопок, но это более раздражает, если у вас есть текст. В любом случае, если вы найдете способ обойти проблему с текстом, Вот код, чтобы использовать:

который применяет красный оверлей к кнопке ( цветовой код-это шестнадцатеричный код для полностью непрозрачного красного цвета-первые две цифры-прозрачность, затем это RR GG BB.).

редактировать: хотя оригинальный ответ ниже работает и легко настраивается, см. этот пост адвокатом разработчика Android в Google, если вы хотите / нуждаетесь в более эффективной реализации. Также обратите внимание, что android:foreground и приходя на все виды, включая ImageView, по умолчанию в Android M.

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

трюк заключается в том, чтобы обернуть ImageView в FrameLayout с атрибутом android:foreground что позволяет нам определить оверлея для его содержания. Если мы установим android:foreground селектору (например, ?android:attr/selectableItemBackground для уровня API 11+) и прикрепите OnClickListener к FrameLayout вместо ImageView, изображение будет перекрыто с drawable нашего селектора — the нажмите эффект мы желаем!

Читайте также:  Виниловая пластинка для андроид

(обратите внимание, что это должно быть помещено в родительский макет.)

использовать style=»?android: borderlessButtonStyle» в XML-файле. Он покажет Android по умолчанию нажмите эффект.

Источник

Android ImageView, ImageButton using Kotlin

Android Tutorial

Kotlin Tutorial

In this tutorial, we’ll discuss and implement ImageView and ImageButton in our android application using Kotlin code.

What is Android ImageView?

ImageView is a subclass of the View class in Android. It is used to display images onto the screen.

The images can be a bitmap or a drawable resource file.

ImageView XML Code

The basic syntax for an ImageView is:

The primary attributes of an ImageView are as follows:

  • The android:src attribute is used to set a drawable resource file.
  • android:background is used to set the background of the ImageView.
  • The android:scaleType is used to set the cropping/fitting style of the image.

Creating ImageView in Kotlin Code

We can create an ImageView object in the following Kotlin code.

this represents the context in which the ImageView is visible. It can be activity/fragment.

To set a drawable on an ImageView programmatically we use:

What is Android ImageButton?

An ImageButton is a subclass of an ImageView. It’s a Button + ImageView. An ImageButton cannot hold text.

All the attributes for the ImageView are applicable to an ImageButton too.

Just like Buttons, on an ImageButton we can set the OnClickListener as well as the OnLongClickListener event.

For an in-depth view of the XML attributes of the ImageView and ImageButton refer to the Android ImageView, ImageButton Tutorial.

Multiple Screen Densities

Screen density is different for different types of phones. A drawable file applicable for a screen size of 4.5 inches can get blurred when seen on a screen size of 5.5 or 6 inches. Hence, in order to keep the image intact for all kinds of devices, we can create different drawable folders.

The drawable-ldpi, drawable-mdpi, drawable-hdpi, drawable-xhdpi, and drawable-xxhdpi are created for low, medium, high, extra high, and extra-extra high densities.

Running an application on the device, the Android SDK automatically detects the screen size and density and uses the appropriate image resource files from the drawable folder.

How to Generate Image Files for Different Screen Densities?

We can use Android Asset Studio to create image resources for different densities.

Alternatively, install the Android Drawable Importer plugin in Android Studio from the Preferences -> Plugins.

Go to “drawable | Batch Drawable” and import the images to have the proper image for every screen density.

Читайте также:  Как сделать андроид айфоном полностью

Set the density type for the current image and drawables for all the densities would be generated for the file.

Android ImageView ImageButton Kotlin Project

We’ve added three sample images and used Drawable Importer to create files for each drawable density.

XML Layout Code

The code for the activity_main.xml class is given below.

We’ve used a FrameLayout. The ImageView occupies the complete screen and the ImageButton is set at the bottom of the layout.

Kotlin Code

The code for the MainActivity.kt Kotlin’s class is given below.

  • In the above code, we’ve created an array of Drawables and an ArrayList of ScaleType.
  • We’ve implemented the View.OnClickListener on the Activity class and set the OnClickListener on both ImageView and ImageButton.
  • Thanks to Kotlin Android Extensions, we don’t need to use findViewById to hook the XML ids in our Kotlin Activity.
  • We’ve used a when statement to check the type of the View that’s clicked to trigger the action.
  • The ImageButton case must be kept above ImageView since every ImageButton is an ImageView. If it was kept below, the ImageButton click listener would have triggered the ImageView block in the when statement.
  • On ImageButton click, we set the next drawable on the ImageView from the array.
  • On ImageView click, we set the color filter over the ImageView using the colorFilter setter property. Also, we set a random scaleType on the ImageView from the arrayList by shuffling the array and taking the first element.

App Output

The output of the above application in action is given below.

The scale type changes when the ImageView is clicked.

To reduce the download size, we’ve removed the xxhdpi and xhdpi image resource files. Try building them using the Drawable Importer Plugin!

Источник

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

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

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

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

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

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

Методы

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

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

Читайте также:  Phone master для андроид что это такое

Примеры

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

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

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

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

Щелчок

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

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

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

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

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

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

Источник

Место ImageView над кнопкой android

Я пытаюсь разместить ImageView над кнопкой, используя RelativeLayout. Вот мой xml:

вот скриншот изображения:

Как вы можете видеть, src-изображение ImageView не отображается. Однако, если я изменю кнопку сзади на ImageView, изображение верхнего ImageView будет видно. Пожалуйста, ознакомьтесь ниже..

изменен xml скриншот:

что я делаю неправильно в первом макете?

9 ответов

причина на самом деле очень простой. 🙂 Мы настолько захвачены мышлением в 2D, что упускаем elevation — в З.

нет ничего плохого в вашем первом макете. The Button просто имеет высшее elevation чем ImageView — точно. 1dp выше. Поэтому, независимо от того, как вы устраиваете два вида, Button поднимается выше.

немного доказательств:

кнопка, по умолчанию получает Widget.Material.Button стиль:

атрибут, который вводит эту высоту, является android:stateListAnimator . StateListAnimator похож на StateListDrawable , и обеспечивает анимацию изменения состояния. Полный xml здесь:ссылке. Но вот базовое состояние кнопки:

как вы можете видеть, значение высоты для кнопки установлено в @dimen/button_elevation_material :

и так ImageView оказывается позади/ниже Button .

Итак, что можно нам делать?

прямым решением было бы установить ImageView’s высота до того же количества — 1dp .

другое решение, которое потребует немного работы, чтобы удалить Button’s высота, а не изменение ImageView’s . На основе значения по умолчанию StateListAnimator , мы можем создать наш собственный — и снять высот. Затем, в res/values-v21/styles.xml определите стиль, который наследует от Widget.Material.Button :

теперь установите этот стиль на свой Button :

редактировать:

на самом деле, мы можем применять индивидуальные StateListAnimator напрямую:

Источник

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