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

Vasant
fuente
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"
/>
Bikesh M
fuente
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)

Micro
fuente
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"
Vasant
fuente
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();
IntelliJ Amiya
fuente
¡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.

Karthik Sridharan
fuente
6

prueba esto. Esto me funcionó.

android:clickable="true"
    android:focusable="true"
    android:background="?android:attr/selectableItemBackground"
Juboraj Sarker
fuente
1
Ya mencioné esto antes ( stackoverflow.com/a/50347848/1954960 ), así que en lugar de causar una respuesta duplicada, apruebe mi respuesta, ¡Gracias! :)
Zafer Celaloglu
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"
Zafer Celaloglu
fuente
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 " .

Filipe Brito
fuente
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"
halcón_plata
fuente
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.

Mark Pazon
fuente
2

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

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

Bita Mirshafiee
fuente
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>
walkmn
fuente
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" />
Jack
fuente
-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">
Amirhossein Naghshzan
fuente
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