¿Añada el efecto de la ondulación a mi botón con color de fondo del botón?

He creado un botón y quiero añadir efecto de rizado a ese botón!

He creado un archivo bg XML de botón: (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> 

Y este es mi archivo de efectos ripple: (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> 

Y este es mi botón que quiero añadir efecto de rizo:

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

Pero después de agregar el efecto de rizo, el fondo del botón es transparente y la visualización del botón sólo cuando se hace clic, de esta forma: Antes de hacer clic y hacer clic

Pero necesito tanto el color de fondo del botón y efecto de rizo, he encontrado algunos de este código en diferentes blogs de desbordamiento de pila, pero todavía no está funcionando!

5 Solutions collect form web for “¿Añada el efecto de la ondulación a mi botón con color de fondo del botón?”

Añadir efecto de ondulación / animación a un botón de Android

Simplemente reemplace su atributo de fondo de botón con android: background = "? Attr / selectableItemBackground" y su código se ve así.

  <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/selectableItemBackground" android:text="New Button" /> 

Otra forma de agregar efecto de rizado / animación a un botón de Android

Mediante este método, puede personalizar el color del efecto ripple. En primer lugar, tiene que crear un archivo xml en su directorio de recursos dibujable. Cree un archivo ripple_effect.xml y agregue el código siguiente. 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> 

Y fijar el fondo del botón al archivo drenable superior del recurso

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

Además de la solución de Jigar Patel , agregue esto a ripple.xml para evitar el fondo transparente de los botones.

 <item android:id="@android:id/background" android:drawable="@color/your-color" /> 

Xml completo :

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

Utilice este ripple.xml como fondo en su botón:

 android:background="@drawable/ripple" 

Agregue el "?attr/selectableItemBackground" al atributo de foreground su vista si ya tiene un fondo junto con android:clickable="true"

Cuando usas android: fondo, estás reemplazando gran parte del estilo y la apariencia de un botón con un color en blanco.

Actualización: A partir de la versión 23.0.0 de AppCompat, hay un nuevo estilo de color Widget.AppCompat.Button.A que utiliza el colorButtonNormal de su tema para el color desactivado y colorAccent para el color habilitado.

Esto le permite aplicarlo a su botón directamente a través de

 <Button ... style="@style/Widget.AppCompat.Button.Colored" /> 

Puede utilizar un drawable en su directorio v21 para su fondo como:

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

Esto garantizará que su color de fondo sea? Attr / colorPrimary y tenga la animación de ondulación predeterminada usando el valor predeterminado? Attr / colorControlHighlight (que también puede establecer en su tema si lo desea).

Nota: tendrás que crear un selector personalizado para menos de 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> 

Solo usa :

 android:backgroundTint="#f816a463" 

En lugar de:

 android:background="#f816a463" 

No olvide cambiar su Button a android.support.v7.widget.AppCompatButton

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.