¡Creé un botón y quiero agregar un efecto dominó a ese botón!
Creé un archivo XML de botón 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>
Y este es mi archivo de efecto dominó: (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 agregar efecto dominó:
<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 fondo del botón de efecto dominó es transparente, y el botón se muestra solo cuando se hace clic, de esta manera:
Antes de hacer clic
Al hacer clic
Pero necesito el color de fondo del botón y el efecto de onda, encontré parte de este código en diferentes blogs de Stack Overflow, ¡pero aún así no funciona!
l
om
al enlace de la imagen. (ver mi edición)Respuestas:
Aquí hay otro xml dibujable para aquellos que desean agregar todo el fondo degradado, el radio de la esquina y el efecto dominó:
Agregue esto al fondo de su botón.
fuente
ripple
.Agregue el atributo de
"?attr/selectableItemBackground"
su vistaandroid:foreground
si ya tiene un fondo junto conandroid:clickable="true"
.fuente
tools:ignore="UnusedAttribute
).?android:attr/selectableItemBackground
(enandroid:attr
lugar deattr
)android:foreground
atributo no tiene efecto en niveles de API inferiores a 23Agregar efecto de onda / animación a un botón de Android
Simplemente reemplace el atributo de fondo del botón con android: background = "? Attr / selectableItemBackground" y su código se verá así.
Otra forma de agregar efecto dominó / animación a un botón de Android
Con este método, puede personalizar el color del efecto dominó. Primero, debe crear un archivo xml en su directorio de recursos dibujables. Cree un archivo ripple_effect.xml y agregue el siguiente código. res / drawable / ripple_effect.xml
Y establezca el fondo del botón en el archivo de recursos extraíble anterior
fuente
Además de la solución de Jigar Patel , agréguelo a ripple.xml para evitar el fondo transparente de los botones.
Xml completo :
Use este ripple.xml como fondo en su botón:
fuente
<item android:id="@android:id/mask"> [...]
. A menos que quieras una máscara ovalada. ¡Gracias por tu respuesta!Cuando el botón tiene un fondo del dibujable, podemos agregar un efecto dominó al parámetro de primer plano. Verifique que el código siguiente funcione para mi botón con un fondo diferente
Agregue el siguiente parámetro para el efecto dominó
Para referencia, consulte el siguiente enlace https://jascode.wordpress.com/2017/11/11/how-to-add-ripple-effect-to-an-android-app/
fuente
AppCompat v7 +
Debe usar
"?android:attr/selectableItemBackground"
o"?android:attr/selectableItemBackgroundBorderless"
, según su preferencia. Yo prefieroBorderless
.Puede ponerlo en
android:background
oandroid:foreground
para mantener las propiedades existentes.El elemento debe tener
android:clickable="true"
yandroid:focusable="true"
para que esto funcione, pero muchos elementos, como los botones, los tienentrue
por defecto.Programáticamente (Java)
Programáticamente (Kotlin)
Función de extensión reutilizable de Kotlin
fuente
Agregar atributos de primer plano y clics funcionó para mí.
fuente
Además de Sudheesh R
fuente
Cuando usa android: background, está 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 Widget.AppCompat.Button.Un estilo de color que utiliza el colorButtonNormal de su tema para el color deshabilitado y colorAccent para el color habilitado.
Esto le permite aplicarlo a su botón directamente a través de
Puede usar un dibujable en su directorio v21 para su fondo como:
Esto asegurará que su color de fondo sea? Attr / colorPrimary y tenga la animación de ondulación predeterminada usando el? Attr / colorControlHighlight predeterminado (que también puede configurar en su tema si lo desea).
Nota: deberá crear un selector personalizado por menos de v21:
fuente
prueba esto
fuente
Un enfoque simple es establecer un tema de vista como se describe aquí .
some_view.xml
some_style.xml
fuente
Solo usa :
En vez de:
No olvides cambiar tu
Button
aandroid.support.v7.widget.AppCompatButton
fuente
Una solución alternativa al uso de
<ripple>
etiqueta (que personalmente prefiero no hacer, porque los colores no son "predeterminados"), es la siguiente:Cree un dibujo para el fondo del botón e inclúyalo
<item android:drawable="?attr/selectableItemBackground">
en<layer-list>
Luego (y creo que esta es la parte importante) se establece programáticamente
backgroundResource(R.drawable.custom_button)
en su instancia de botón.Actividad / Fragmento
Diseño
custom_button.xml
fuente