Я создал кнопку и хочу добавить к ней эффект ряби!
Я создал XML-файл кнопки bg: (bg_btn.xml)
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient android:startColor="#FFFFFF" android:endColor="#00FF00" android:angle="270" />
<corners android:radius="3dp" />
<stroke android:width="5px" android:color="#000000" />
</shape>
И это мой файл с эффектом пульсации: (ripple_bg.xml)
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="#f816a463"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#f816a463" />
</shape>
</item>
</ripple>
А это моя кнопка, которой я хочу добавить эффект пульсации:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_centerHorizontal="true"
android:layout_marginTop="173dp"
android:textColor="#fff"
android:background="@drawable/ripple_bg"
android:clickable="true" />
Но после добавления эффекта пульсации фон кнопки становится прозрачным, и кнопка отображается только при нажатии, например:
Перед нажатием
По щелчку
Но мне нужны как цвет фона кнопки, так и эффект пульсации, я нашел часть этого кода в разных блогах Stack Overflow, но все равно он не работает!
l
илиm
к ссылке на изображение. (см. мою правку)Ответы:
Вот еще один доступный XML для тех, кто хочет добавить все вместе градиентный фон, радиус угла и эффект ряби:
Добавьте это к фону вашей кнопки.
PS: этот ответ работает для android api 21 и выше.
источник
ripple
.Добавьте
"?attr/selectableItemBackground"
кandroid:foreground
атрибуту вашего представления, если он уже имеет фон вместе сandroid:clickable="true"
.источник
tools:ignore="UnusedAttribute
).?android:attr/selectableItemBackground
(android:attr
вместоattr
)android:foreground
атрибут не влияет на уровни API ниже 23Добавление эффекта ряби / анимации к кнопке Android
Просто замените атрибут фона кнопки на android: background = "? Attr / selectableItemBackground", и ваш код будет выглядеть так.
Еще один способ добавить эффект ряби / анимацию к кнопке Android
Используя этот метод, вы можете настроить цвет эффекта ряби. Во-первых, вам необходимо создать XML-файл в каталоге доступных для рисования ресурсов. Создайте файл ripple_effect.xml и добавьте следующий код. Рез / рисуем / ripple_effect.xml
И установите фон кнопки на указанный выше файл ресурсов.
источник
В дополнение к решению Jigar Patel добавьте его в ripple.xml, чтобы избежать прозрачного фона кнопок.
Полный xml :
Используйте этот ripple.xml в качестве фона для вашей кнопки:
источник
<item android:id="@android:id/mask"> [...]
. Если только вам не нужна овальная маска. Спасибо за Ваш ответ!Когда кнопка имеет фон из объекта рисования, мы можем добавить эффект пульсации к параметру переднего плана. Проверьте код ниже, как он работает для моей кнопки с другим фоном.
Добавьте ниже параметр для эффекта пульсации
Для справки см. Ссылку ниже https://jascode.wordpress.com/2017/11/11/how-to-add-ripple-effect-to-an-android-app/
источник
AppCompat v7 +
Вы должны использовать
"?android:attr/selectableItemBackground"
или"?android:attr/selectableItemBackgroundBorderless"
, в зависимости от ваших предпочтений. Я предпочитаюBorderless
.Вы можете поместить его
android:background
илиandroid:foreground
оставить существующие свойства.Чтобы это работало, элемент должен иметь
android:clickable="true"
иandroid:focusable="true"
, но многие элементы, такие как кнопки, имеют ихtrue
по умолчанию.Программно (Java)
Программно (Котлин)
Многоразовая функция расширения Kotlin
источник
У меня сработало добавление атрибутов переднего плана и интерактивных атрибутов.
источник
В дополнение к Sudheesh R
источник
Когда вы используете android: background, вы заменяете большую часть стиля и внешнего вида кнопки на пустой цвет.
Обновление: в выпуске AppCompat версии 23.0.0 появился новый цветной стиль Widget.AppCompat.Button.A, который использует colorButtonNormal вашей темы для отключенного цвета и colorAccent для включенного цвета.
Это позволяет применить его к кнопке напрямую через
Вы можете использовать drawable в каталоге v21 для фона, например:
Это обеспечит цвет вашего фона? Attr / colorPrimary и будет иметь анимацию пульсации по умолчанию с использованием значения по умолчанию? Attr / colorControlHighlight (которое вы также можете установить в своей теме, если хотите).
Примечание: вам нужно будет создать собственный селектор для версии ниже 21:
источник
попробуй это
источник
Простой подход - установить тему представления, как описано здесь .
some_view.xml
some_style.xml
источник
Просто используйте:
Вместо того:
Не забудьте изменить свой
Button
наandroid.support.v7.widget.AppCompatButton
источник
Альтернативное решение для использования
<ripple>
тега (которое я лично предпочитаю не делать, потому что цвета не являются "стандартными") следующее:Создайте объект для рисования для фона кнопки и включите его
<item android:drawable="?attr/selectableItemBackground">
в<layer-list>
Затем (и я думаю, что это важная часть) программно устанавливается
backgroundResource(R.drawable.custom_button)
на вашем экземпляре кнопки.Деятельность / Фрагмент
раскладка
custom_button.xml
источник