android - objetos - efecto domino historia
Cómo crear efecto dominó en diseño simple (8)
Establecer android:clickable="true"
en su diseño.
¿Cómo puedo tener un efecto dominó en un diseño lineal / relativo simple cuando toco el diseño?
Intenté establecer el fondo de un diseño en algo como:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight" >
<item android:drawable="@android:color/white"/>
</ripple>
Sin embargo, solo veo un fondo blanco liso y ningún efecto de ondulación al tocar el diseño. ¿Qué estoy haciendo mal?
Editar:
Como referencia, aquí está mi archivo xml de diseño:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="250dp"
android:layout_height="250dp"
android:background="@drawable/test"
android:clickable="true">
</RelativeLayout>
Establezca estas propiedades en su diseño (si su diseño tiene el fondo blanco / claro predeterminado):
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground"
No necesita un drawable personalizado en este caso.
Sin embargo, si tu diseño tiene un fondo negro / oscuro, deberías crear tu propia ondulación dibujable como esta:
<?xml version="1.0" encoding="utf-8"?>
<!-- An white rectangle ripple. -->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@android:color/white">
<item
android:id="@android:id/mask"
android:gravity="center">
<shape android:shape="rectangle">
<solid android:color="@android:color/white"/>
</shape>
</item>
</ripple>
Y luego configure esta ondulación dibujable como su propiedad android: background .
Puede ver muchos ejemplos de estos tipos de ondas en AOSP: http://androidxref.com/8.0.0_r4/search?q=ripple&defs=&refs=&path=&hist=&project=art&project=bionic&project=bootable&project=build&project=cts&project=dalvik&project=developers&project=development&project=device&project=docs&project=external&project=frameworks&project=hardware&project=kernel&project=libcore&project=libnativehelper&project=packages&project=pdk&project=platform_testing&project=prebuilts&project=sdk&project=system&project=test&project=toolchain&project=tools
Estoy agregando esto además de la respuesta de en caso de que alguien quiera tener un diseño con diferentes colores y también tenga un efecto de onda expansiva. Simplemente crea un efecto de onda expansiva en objetos arrastrables como este:
ripple.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/rippleColor"
tools:targetApi="lollipop"> <!-- ripple effect color -->
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/backgroundColor" /> <!-- background color -->
</shape>
</item>
</ripple>
luego, dele como fondo de su diseño o cualquier botón que mencionó en su respuesta.
android:clickable="true"
android:background="@drawable/ripple"
Intento todas esas respuestas y nada me funcionó, así que resolví crear el siguiente estilo:
<style name="Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless">
<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>
<item name="android:layout_marginLeft">-6dp</item>
<item name="android:layout_marginRight">-6dp</item>
<item name="android:paddingTop">0dp</item>
<item name="android:paddingBottom">0dp</item>
<item name="android:paddingLeft">6dp</item>
<item name="android:paddingRight">6dp</item>
</style>
Y luego, apliqué a mi diseño lineal:
<LinearLayout
android:id="@+id/ll_my_ripple"
style="@style/Button.Borderless">
</LinearLayout>
Pon esto en tu diseño:
android:clickable="true"
android:background="?attr/selectableItemBackground"
Nota: hay un error en la documentación de la API. Funcionará solo en API> = 23
Para todos los niveles de API usa esta Solution
Resulta que esto está funcionando como se esperaba. El valor estándar de Material colorControlHighlight es #40ffffff
. Entonces, sobre un fondo blanco, esto no aparecerá. Cambiar el color de resaltado a otra cosa funciona, y / o cambiar el color de fondo del objeto.
Gracias a todos (especialmente a Alanv por apuntarme en la dirección correcta).
Simplemente agregue el efecto de onda predeterminado con android:background="?selectableItemBackground"
Me gusta:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="?selectableItemBackground"
android:clickable="true"
>
...
</LinearLayout>
Tienes que alterar el siguiente fragmento de código en cualquier widget ( TextView
/ Button
) y puedes implementar el efecto Ripple :
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
Y eres bueno para ir.