¿Cómo configurar un efecto dominó en textview o imageview en Android?


127

Quiero establecer un efecto dominó en la vista de texto y la vista de imagen en Android Studio. ¿Cómo puedo hacerlo?


1
Primero elabore su pregunta. Qué es lo que realmente necesita y qué ha intentado hasta ahora. Simplemente decir que quiero un efecto dominó lo convierte en una pregunta muy amplia. También puede dar algún enlace para referencia sobre lo que desea. También vea stackoverflow. com / help / how-to-ask
Anirudh Sharma

En realidad, quiero efecto para el efecto de selección / anulación de selección de vista de texto y vista de imagen.
Vasant

¿Has intentado buscar lo mismo?
Anirudh Sharma

Respuestas:


276

Ref: http://developer.android.com/training/material/animations.html ,

http://wiki.workassis.com/category/android/android-xml/

<TextView
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>

<ImageView
.
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>

2
bueno, funcionó conmigo en lollipop, pero de esta manera, ¿para qué versión de Android androide? y funciona en pre-lollipop?
Basheer AL-MOMANI

2
@ Richard He tenido un problema con KitKat (o ICS) hace un año, y los oyentes de clic no funcionaban sin Android: clickable = "true" para esa versión
DoruChidean

25
En las versiones modernas de Android, esto es ahoraandroid:background="?android:attr/selectableItemBackground"
tmm1

2
¿Cómo puedo usar esto cuando quiero un fondo personalizado?
mrid

3
La diferencia entre esto con / sin Borderless youtube.com/watch?v=wOjA8tS5sbc
Gibolt

82

Si desea que la ondulación esté limitada al tamaño de TextView / ImageView, use:

<TextView
android:background="?attr/selectableItemBackground"
android:clickable="true"/>

(Creo que se ve mejor)


2
¿Hay alguna diferencia en el uso de selectableItemBackgroundvsselectableItemBackgroundBorderless
rakesh kashyap

No sé por qué no estaba limitado a los bordes y se expande a través de todo el diseño
VSB

44
@rakeshkashyap la diferencia es que seleccionableItemBackground mantendrá la onda dentro del tamaño de su vista (ancho / alto). selectableItemBackgroundBorderless expandirá su ondulación sobre otras vistas (como la ondulación de la aplicación de calculadora oficial)
Tudor

1
y también necesito configurar esto >>> android: focusable = "true"
Amós

Servicial. Gracias.
Pooja hace

25

Consulte la respuesta a continuación para conocer el efecto dominó.

ondulación en Textview o view:

android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackgroundBorderless"

ondulación en el botón o la vista de imagen:

android:foreground="?android:attr/selectableItemBackgroundBorderless"

44
Tenga en cuenta que selectableItemBackgroundBorderlesses API 21+. A continuación puede optar selectableItemBackgroundpor evitar problemas de compatibilidad
StevenTB

10

Puedes usar android-ripple-background

Efecto de inicio

final RippleBackground rippleBackground=(RippleBackground)findViewById(R.id.content);
ImageView imageView=(ImageView)findViewById(R.id.centerImage);
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        rippleBackground.startRippleAnimation();
    }
});

Detener animación:

rippleBackground.stopRippleAnimation();

¡bonito! ¿Hay una versión de Kotlin de esto?
rengineer

8
<TextView
            android:id="@+id/txt_banner"
            android:layout_width="match_parent"
            android:text="@string/banner"
            android:gravity="center|left"
            android:layout_below="@+id/title"
            android:background="@drawable/ripple_effect"
            android:paddingLeft="15dp"
            android:textSize="15sp"
            android:layout_height="45dp" />

agregue esto en dibujable

<?xml version="1.0" encoding="utf-8"?>
<!--this ribble animation only working for >= android version 21-->
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/click_efect" />

prueba esto.



5

Además de las respuestas anteriores, se agrega enfoque para evitar la advertencia del editor de IU

android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"

4

En el caso de que la solución bien votada publicada por @Bikesh M Annur ( aquí ) no funcione para usted, intente usar:

<TextView
...
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true" />

<ImageView
...
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true" />

Además, cuando se usa android:clickable="true"agregar android:focusable="true"porque:

" No se puede acceder a un widget que se puede hacer clic pero que no se puede enfocar a través del teclado " .


3

Añadir android:clickable="true" android:focusable="true"

Para el efecto dominó

android:background="?attr/selectableItemBackgroundBorderless"

Para efecto seleccionable

android:background="?android:attr/selectableItemBackground"

Para efecto de botón

android:adjustViewBounds="true" style="?android:attr/borderlessButtonStyle"

2

Además de la respuesta de @Bikesh M Annur, asegúrese de actualizar sus bibliotecas de soporte. Anteriormente estaba usando 23.1.1 y no pasó nada. Actualizarlo a 23.3.0 hizo el truco.


2

para ondulación circular: android:background="?attr/selectableItemBackgroundBorderless"

para la ondulación del rectángulo: android:background="?attr/selectableItemBackground"


1

O puede intentar usar esta biblioteca (android 9+): RippleEffect

Integración

dependencies {
    compile 'com.github.traex.rippleeffect:library:1.3'
}

Uso:

<com.andexert.library.RippleView
  android:id="@+id/more"
  android:layout_width="?android:actionBarSize"
  android:layout_height="?android:actionBarSize"
  android:layout_toLeftOf="@+id/more2"
  android:layout_margin="5dp"
  rv_centered="true">

  <ImageView
    android:layout_width="?android:actionBarSize"
    android:layout_height="?android:actionBarSize"
    android:src="@android:drawable/ic_menu_edit"
    android:layout_centerInParent="true"
    android:padding="10dp"
    android:background="@android:color/holo_blue_dark"/>

</com.andexert.library.RippleView>

8
Lo usé durante bastante tiempo, pero ya no lo recomiendo a menos que apuntes a Android 2.3. Es defectuoso, lento y produce código repetitivo. Y dado que en este momento el 43% de todos los dispositivos tienen Android 5 o 6, puede seguir selectableItemBackgroundcuando apunta a Android 4 y superior.
0101100101

0

La mejor manera es agregar:

    <ImageView
        android:id="@+id/ivBack"
        style="?attr/actionButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:src="@drawable/ic_back_arrow_black"
        android:tint="@color/white" />

-4

Utilizando bibliotecas. Este es uno de ellos. Simplemente agregue su dependencia y coloque el siguiente código en xml antes de cada elemento que necesite un efecto dominó:

<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">

44
oh por favor no, no es la mejor manera porque tienes menos control sobre él y es ampliamente compatible con el SDK de Android. Si alguien lee esto, recomiendo mirar el comentario de @Bikesh o Karthik si quieres controlar el color.
Dion Segijn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.