Добавить эффект пульсации к моей кнопке с цветом фона кнопки?
Я создал кнопку, и я хочу добавить эффект пульсации к этой кнопке!
Я создал 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, но все равно он не работает!
11 ответов
вот еще один drawable xml для тех, кто хочет добавить все вместе градиентный фон, радиус угла и эффект пульсации:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorPrimaryDark">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimaryDark" />
<corners android:radius="@dimen/button_radius_large" />
</shape>
</item>
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<gradient
android:angle="90"
android:endColor="@color/colorPrimaryLight"
android:startColor="@color/colorPrimary"
android:type="linear" />
<corners android:radius="@dimen/button_radius_large" />
</shape>
</item>
</ripple>
добавьте это в фон вашей кнопки.
<Button
...
android:background="@drawable/button_background" />
добавить "?attr/selectableItemBackground"
на ваш взгляд foreground
атрибут, если он уже имеет фон вместе с android:clickable="true"
добавить эффект пульсации / анимацию на кнопку Android
просто замените атрибут фона кнопки на android: фон="?attr / selectableItemBackground" и ваш код выглядит так.
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:text="New Button" />
другой способ добавить эффект пульсации / анимацию к кнопке Android
используя этот метод, вы можете настроить цвет эффекта пульсации. Во-первых, необходимо создать xml-файл в каталоге ресурсов для рисования. Создайте ripple_effect.xml-файл и добавить следующий код. res / drawable / ripple_effect.в XML
<?xml version="1.0" encoding="utf-8"?>
<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>
и установите фон кнопки выше drawable resource file
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_effect"
android:padding="16dp"
android:text="New Button" />
кроме Жигар Пательрешение, добавьте это в пульсация.в XML чтобы избежать прозрачного фона кнопок.
<item
android:id="@android:id/background"
android:drawable="@color/your-color" />
полный xml :
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="@color/your-color"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@color/your-color" />
</shape>
</item>
<item
android:id="@android:id/background"
android:drawable="@color/your-color" />
</ripple>
использовать пульсация.в XML в качестве фона кнопки :
android:background="@drawable/ripple"
когда кнопка имеет фон из drawable, мы можем добавить эффект пульсации к параметру переднего плана.. Проверьте ниже код его работы для моей кнопки с другим фоном
<Button
android:layout_width="wrap_content"
android:layout_height="40dp"
android:gravity="center"
android:layout_centerHorizontal="true"
android:background="@drawable/shape_login_button"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:text="@string/action_button_login"
/>
добавить ниже параметр для эффекта пульсации
android:foreground="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
Для справки см. ниже ссылку https://madoverandroid.wordpress.com/2017/11/11/how-to-add-ripple-effect-to-an-android-app/
при использовании android: фон, вы заменяете большую часть стиля и внешний вид кнопки с пустым цветом.
обновление: начиная с версии 23.0.0 выпуска AppCompat, есть новый виджет.Совместимости приложений.Кнопка.Цветной стиль, который использует colorButtonNormal вашей темы для отключенного цвета и colorAccent для включенного цвета.
Это позволяет применить его к кнопке напрямую через
<Button
...
style="@style/Widget.AppCompat.Button.Colored" />
вы можете использовать drawable в вашем v21 каталог для фона, например:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:drawable="?attr/colorPrimary"/>
</ripple>
Это обеспечит ваш цвет фона ?м/colorPrimary и имеет по умолчанию яркая анимация по умолчанию ?attr / colorControlHighlight (который вы также можете установить в своей теме, если хотите).
Примечание: вам придется создать пользовательский селектор для менее чем v21:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/primaryPressed" android:state_pressed="true"/>
<item android:drawable="@color/primaryFocused" android:state_focused="true"/>
<item android:drawable="@color/primary"/>
</selector>
кроме Sudheesh R
добавить эффект пульсации / анимацию на кнопку Android с кнопкой прямоугольной формы с углом
создать XML-файл в res/холст/имя_файла.в XML
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="@color/colorWhite"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimaryDark" />
<corners android:radius="50dp" />
</shape>
</item>
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<gradient
android:angle="90"
android:endColor="@color/colorAccent"
android:startColor="@color/colorPrimary"
android:type="linear" />
<corners android:radius="50dp" />
</shape>
</item>
</ripple>
добавление атрибутов переднего плана и кликабельных работало для меня.
<Button
...
android:background="@color/your_color"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:clickable="true" />
просто использовать :
android:backgroundTint="#f816a463"
вместо:
android:background="#f816a463"
не забудьте изменить свой Button
to android.support.v7.widget.AppCompatButton
попробуй такое
<Button
android:id="@+id/btn_location"
android:layout_width="121dp"
android:layout_height="38dp"
android:layout_gravity="center"
android:layout_marginBottom="24dp"
android:layout_marginTop="24dp"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:background="@drawable/btn_corner"
android:gravity="center_vertical|center_horizontal"
android:paddingLeft="13dp"
android:paddingRight="13dp"
android:text="Save"
android:textColor="@color/color_white" />
совместимости приложений В7+
если вы не префикс с
?android:
ваше приложение рухнет.
вы должны использовать "?android:attr/selectableItemBackground"
или "?android:attr/selectableItemBackgroundBorderless"
, исходя из ваших предпочтений. Я предпочитаю Borderless
.
вы можете положить его либо в android:background
или android:foreground
сохранить существующие свойства.
элемент должен иметь android:clickable="true"
и android:focusable="true"
для того чтобы это работало, но многие элементы, такие как кнопки, у них true
по умолчанию.
<Button
...
android:background="@color/white"
android:foreground="?android:attr/selectableItemBackgroundBorderless"
/>
<TextView
...
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
/>