В Android, когда я устанавливаю фоновое изображение на кнопку, я не вижу никакого эффекта на кнопке.
Мне нужен какой-то эффект на кнопке, чтобы пользователь мог распознать, что кнопка нажата.
Кнопка должна быть темной в течение нескольких секунд при нажатии, что мне делать для этого?
Спасибо.
Ответы:
Этого можно достичь, создав файл XML с возможностью рисования, содержащий список состояний кнопки. Так, например, если вы создаете новый XML-файл с именем «button.xml» со следующим кодом:
Чтобы фоновое изображение оставалось затемненным при печати, создайте второй XML-файл и назовите его gradient.xml со следующим кодом:
В xml вашей кнопки установите фон как кнопку xml, например
Надеюсь это поможет!
Изменить: изменен приведенный выше код, чтобы на кнопке отображалось изображение (ВАШЕ ИЗОБРАЖЕНИЕ), а не цвет блока.
источник
Это проще, когда у вас много кнопок с изображениями, и вы не хотите писать xml-файлы для каждой кнопки.
Версия Котлина:
Версия Java:
источник
Создайте свой
AlphaAnimation
объект, который определяет, насколько будет эффект затухания кнопки, а затем позвольте ему начать вonClickListener
ваших кнопкахНапример :
конечно, это просто способ, не самый предпочтительный, просто проще
источник
Вы можете просто использовать передний план для
View
достижения эффекта кликабельности:Для использования с темной темой добавьте также тему в свою
layout
(чтобы эффект кликабельность был понятен):источник
Чтобы ваш элемент соответствовал внешнему виду системы, попробуйте сослаться на системный атрибут
android:attr/selectableItemBackground
в теге фона или переднего плана желаемого представления:Используйте оба атрибута, чтобы получить желаемый эффект до / после уровня API 23 соответственно.
https://stackoverflow.com/a/11513474/4683601
источник
Или используя только одно фоновое изображение, вы можете добиться эффекта щелчка, используя
setOnTouchListener
Два пути
А если вы не хотите использовать
setOnTouchLister
, другой способ добиться этого -источник
просто хочу добавить еще один простой способ сделать это: если ваш ImageButton останется фоном и вы не установите для него значение null, он будет работать как обычная кнопка и будет показывать анимацию щелчка при нажатии точно так же, как и другие кнопки. фон, пока он еще есть:
Прокладки не позволят фону быть видимым и заставят кнопку действовать как другие кнопки.
источник
Это лучшее решение, которое я придумал, взяв подсказки из ответа @ Vinayak. Все остальные решения имеют другие недостатки.
Прежде всего создайте такую функцию.
Пояснение:
getConstantState (). newDrawable () используется для клонирования существующего Drawable, в противном случае будет использоваться тот же Drawable. Подробнее здесь: Android: клонирование объекта для рисования для создания объекта StateListDrawable с помощью фильтров.
mutate () используется для того, чтобы клон Drawable не делился своим состоянием с другими экземплярами Drawable. Подробнее об этом читайте здесь: https://developer.android.com/reference/android/graphics/drawable/Drawable.html#mutate ().
Использование:
Вы можете передать любой тип View (Button, ImageButton, View и т. Д.) В качестве параметра функции, и к ним будет применен эффект щелчка.
источник
источник
Используйте RippleDrawable для эффекта нажатия / щелчка состояния Material Design.
Чтобы добиться этого, создайте элемент пульсации как .xml в папке / drawable и используйте его в android: background для любых представлений.
Эффект для нажатой / нажатой иконки, используйте эффект круговой ряби, например:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/darker_gray" />
Эффект для вида, на котором щелкнули с границей прямоугольника, мы можем добавить рябь по существующему объекту для рисования, как показано ниже:
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#000000"> <item android:drawable="@drawable/your_background_drawable"/> </ripple>
источник
Для всех просмотров
android:background="?android:attr/selectableItemBackground"
Но для cardview, который использует высоту
android:foreground="?android:attr/selectableItemBackground"
Для эффекта кругового щелчка, как на панели инструментов
Также вам нужно установить
источник
Внося небольшое дополнение к ответу Андраса:
Вы можете использовать,
postDelayed
чтобы цветовой фильтр прослужил в течение небольшого периода времени, чтобы сделать его более заметным:Вы можете изменить значение задержки 100L по своему усмотрению.
источник
Если вы используете фон xml вместо IMG, просто удалите это:
из 1-го ответа, который дал нам @Ljdawson.
источник
Создайте файл bounce.xml для анимации
Добавьте эту строку в onClick для инициализации
Вы получаете эффект сжатия одним нажатием кнопки.
источник