Подтвердить что ты не робот

Добавить эффект пульсации на мою кнопку с цветом фона кнопки?

Я создал кнопку и хочу добавить к ней эффект пульсации!

Я создал кнопку bg XML файл: (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, но все же он не работает!

4b9b3361

Ответ 1

Вот еще один гибкий 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" />

Ответ 2

добавьте атрибут "?attr/selectableItemBackground" к вашему виду foreground, если он уже имеет фон вместе с android:clickable="true"

Ответ 3

Добавить эффект пульсации/анимацию на кнопку Android

Просто замените свой фоновый атрибут кнопки android: background = "? 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 и добавьте следующий код. Рез/рисуем/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>

И установите фон кнопки для вышерасположенного файла ресурсов

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/ripple_effect"
    android:padding="16dp"
    android:text="New Button" />

Ответ 4

В дополнение к решению Jigar Patel добавьте его в ripple.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>

Используйте этот ripple.xml в качестве фона в вашей кнопке:

android:background="@drawable/ripple"

Ответ 5

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

    <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/

Ответ 6

AppCompat v7+

Если вы не префикс ?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"
/>

Ответ 7

Когда вы используете андроид: фон, вы заменяете большую часть стиля и внешнего вида кнопки с пустым цветом.

Обновление: Начиная с версии App.0.0.0 версии 23.0.0, существует новый цветной стиль Widget.AppCompat.Button.A, который использует вашу тему 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>

Это обеспечит ваш фоновый цвет: attr/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>

Ответ 8

В дополнение к Sudheesh R

Добавьте эффект пульсации/анимацию на кнопку Android с прямоугольником прямоугольника с углом

Создать файл xml res/drawable/your_file_name.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>

Ответ 9

Добавление переднего плана и кликабельных атрибутов работало на меня.

<Button
    ... 
    android:background="@color/your_color"
    android:foreground="?attr/selectableItemBackgroundBorderless"
    android:clickable="true" />

Ответ 10

попробуйте это

<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" />

Ответ 11

Просто используйте:

android:backgroundTint="#f816a463"

Вместо:

android:background="#f816a463"

Не забудьте изменить Button на android.support.v7.widget.AppCompatButton

Ответ 12

Альтернативное решение для использования <ripple> (что я лично предпочитаю не делать, потому что цвета не "по умолчанию"), заключается в следующем:

Создайте рисование для фона кнопки и включите <item android:drawable="?attr/selectableItemBackground"> в <layer-list>

Затем (и я думаю, что это важная часть) программно установите backgroundResource(R.drawable.custom_button) для вашего экземпляра кнопки.

Деятельность/Фрагмент

Button btn_temp = view.findViewById(R.id.btn_temp);
btn_temp.setBackgroundResource(R.drawable.custom_button);

раскладка

<Button
    android:id="@+id/btn_temp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/custom_button"
    android:text="Test" />

custom_button.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <item android:drawable="?attr/selectableItemBackground" />
</layer-list>