En Android, cuando configuro la imagen de fondo en Botón, no puedo ver ningún efecto en el botón.
Necesito algún efecto en el botón para que el usuario pueda reconocer que se hizo clic en ese botón.
El botón debe estar oscuro durante unos segundos cuando se hace clic, entonces, ¿qué debo hacer para esto?
Gracias.
Respuestas:
Esto se puede lograr creando un archivo xml dibujable que contenga una lista de estados para el botón. Entonces, por ejemplo, si crea un nuevo archivo xml llamado "button.xml" con el siguiente código:
Para mantener la imagen de fondo con una apariencia oscura en la prensa, cree un segundo archivo xml y llámelo gradient.xml con el siguiente código:
En el xml de su botón, configure el fondo para que sea el botón xml, por ejemplo
¡Espero que esto ayude!
Editar: se modificó el código anterior para mostrar una imagen (SUIMAGEN) en el botón en lugar de un color de bloque.
fuente
Es más simple cuando tiene muchos botones de imagen y no desea escribir xml-s para cada botón.
Versión de Kotlin:
Versión de Java:
fuente
Cree su
AlphaAnimation
Objeto que decida cuánto será el efecto de desvanecimiento del botón, luego déjelo comenzar en elonClickListener
de sus botonesPor ejemplo :
por supuesto, esta es solo una forma, no la más preferida, es más fácil
fuente
Simplemente puede usar el primer plano para
View
lograr un efecto en el que se puede hacer clic:Para usar con el tema oscuro, agregue también el tema a su
layout
(para que el efecto en el que se puede hacer clic sea claro):fuente
Para que su artículo sea coherente con el aspecto del sistema, intente hacer referencia al atributo del sistema
android:attr/selectableItemBackground
en la etiqueta de fondo o primer plano de la vista deseada:Utilice ambos atributos para obtener el efecto deseado antes / después del nivel de API 23 respectivamente.
https://stackoverflow.com/a/11513474/4683601
fuente
O usando solo una imagen de fondo, puede lograr el efecto de clic usando
setOnTouchListener
Dos caminos
Y si no quiere usar
setOnTouchLister
, la otra forma de lograrlo esfuente
solo quiero agregar otra manera fácil de hacer esto: si su ImageButton permanece en su fondo y no lo establece en nulo, funcionará como un botón normal y mostrará la animación de clic mientras hace clic exactamente como otros botones. el fondo mientras todavía está allí:
Los rellenos no permiten que el fondo sea visible y hacen que el botón actúe como otros botones.
fuente
Esta es la mejor solución que se me ocurrió tomando sugerencias de la respuesta de @ Vinayak. Todas las demás soluciones tienen diferentes inconvenientes.
Primero que nada cree una función como esta.
Explicación:
getConstantState (). newDrawable () se usa para clonar el Drawable existente, de lo contrario se usará el mismo Drawable. Lea más desde aquí: Android: clonación de un elemento de diseño para hacer un StateListDrawable con filtros
mutate () se usa para hacer que el clon de Drawable no comparta su estado con otras instancias de Drawable. Lea más sobre esto aquí: https://developer.android.com/reference/android/graphics/drawable/Drawable.html#mutate ()
Uso:
Puede pasar cualquier tipo de vista (botón, botón de imagen, vista, etc.) como parámetro a la función y se les aplicará el efecto de clic.
fuente
fuente
Utilice RippleDrawable para el efecto de estado presionado / hecho clic en Material Design.
Para lograr esto, cree un elemento de ondulación como un .xml en la carpeta / dibujable y úselo en android: background para cualquier vista.
Efecto para el icono presionado / hecho clic, use un efecto de onda circular, por ejemplo:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/darker_gray" />
Efecto para la vista en la que se hizo clic con el límite del rectángulo, podemos agregar ondulación sobre el elemento de dibujo existente como se muestra a continuación:
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#000000"> <item android:drawable="@drawable/your_background_drawable"/> </ripple>
fuente
Por todas las vistas
android:background="?android:attr/selectableItemBackground"
Pero para cardview que tiene uso de elevación
android:foreground="?android:attr/selectableItemBackground"
Para el efecto de clic circular como en la barra de herramientas
También necesitas configurar
fuente
Haciendo una pequeña adición a la respuesta de Andràs:
Puede utilizar
postDelayed
para hacer que el filtro de color dure un pequeño período de tiempo para que sea más notable:Puede cambiar el valor del retardo 100L para adaptarlo a sus necesidades.
fuente
Si está usando un fondo xml en lugar de IMG, simplemente elimine esto:
de la primera respuesta que nos dio @Ljdawson.
fuente