Come impostare un effetto a catena su textview o imageview su Android?


127

Voglio impostare un effetto a catena su textview e imageview in Android Studio. Come posso farlo?


1
Per favore, prima elabora la tua domanda: di cosa hai effettivamente bisogno e cosa hai provato finora. Basta dire che voglio l'effetto a catena la rende una domanda molto ampia. Puoi anche dare qualche link per riferimento su ciò che vuoi. Vedi anche stackoverflow . com / help / how-to-ask
Anirudh Sharma,

In realtà voglio un effetto per la selezione della vista di testo e di selezione / deselezione della vista di immagine.
Vasant,

hai provato a cercare lo stesso?
Anirudh Sharma,

Risposte:


276

Rif: 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
bello ha funzionato con me su lollipop, ma in questo modo per quale versione Android Android? e funziona su pre-lecca-lecca?
Basheer AL-MOMANI,

2
@Richard Ho avuto un problema con KitKat (o ICS) un anno fa e gli ascoltatori di clic non funzionavano senza Android: clickable = "true" per quella versione
DoruChidean,

25
Nelle versioni moderne di Android, questo è oraandroid:background="?android:attr/selectableItemBackground"
tmm1

2
Come posso usare questo quando voglio uno sfondo personalizzato ??
mrid,

3
La differenza tra questo con / senza Borderless youtube.com/watch?v=wOjA8tS5sbc
Gibolt

82

Se si desidera che l'ondulazione sia limitata alle dimensioni di TextView / ImageView, utilizzare:

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

(Penso che sembra migliore)


2
C'è qualche differenza nell'usare selectableItemBackgroundvsselectableItemBackgroundBorderless
rakesh kashyap il

Non so perché non fosse limitato ai confini e si espandesse attraverso l'intero layout
VSB il

4
@rakeshkashyap la differenza è che selettivaItemBackground manterrà l'ondulazione all'interno della sua dimensione di visualizzazione (larghezza / altezza). selectableItemBackgroundBorderless espanderà la sua ondulazione su altre viste (come l'ondulazione ufficiale dell'app calcolatrice)
Tudor

1
e devi anche impostare questo >>> android: focusable = "true"
Amos,

Utile. Grazie.
Pooja

25

Fare riferimento alla risposta di seguito per l'effetto a catena.

ondulazione su Textview o vista:

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

ripple su Button o Imageview:

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

4
Si noti che selectableItemBackgroundBorderlessè API 21+. Di seguito puoi scegliere selectableItemBackgrounddi evitare problemi di compatibilità
StevenTB il

10

Puoi usare android-ripple-background

Inizia l'effetto

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();
    }
});

Ferma animazione:

rippleBackground.stopRippleAnimation();

simpatico! esiste una versione Kotlin di questo?
ingegnere

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" />

aggiungi questo in drawable

<?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" />

prova questo.


6

prova questo. Questo ha funzionato per me.

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

1
L'ho già menzionato in precedenza ( stackoverflow.com/a/50347848/1954960 ) quindi, invece di causare una risposta duplicata, per favore rispondi alla mia risposta, grazie! :)
Zafer Celaloglu,

5

Oltre alle risposte precedenti, è possibile aggiungere un focus per evitare l'avviso dell'editor dell'interfaccia utente

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

4

Nel caso della soluzione ben votata pubblicata da @Bikesh M Annur ( qui ) non ti funziona, prova a usare:

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

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

Inoltre, quando si utilizza android:clickable="true"aggiungi android:focusable="true"perché:

" Un widget che è dichiarato cliccabile ma non dichiarato focalizzabile non è accessibile tramite la tastiera. "


3

Inserisci android:clickable="true" android:focusable="true"

Per effetto a catena

android:background="?attr/selectableItemBackgroundBorderless"

Per effetto selezionabile

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

Per l'effetto pulsante

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

2

Oltre alla risposta di @Bikesh M Annur, assicurati di aggiornare le tue librerie di supporto. In precedenza stavo usando 23.1.1 e non è successo nulla. L'aggiornamento a 23.3.0 ha funzionato.


2

per l'ondulazione del cerchio: android:background="?attr/selectableItemBackgroundBorderless"

per l'ondulazione del rettangolo: android:background="?attr/selectableItemBackground"


1

Oppure puoi provare a utilizzare questa libreria (Android 9+): RippleEffect

Integrazione

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
L'ho usato per molto tempo, ma non lo consiglio più a meno che non miri ad Android 2.3. È difettoso, lento e produce il codice del boilerplate. E poiché in questo momento il 43% di tutti i dispositivi ha Android 5 o 6, puoi limitarti a scegliere selectableItemBackgroundcome target Android 4 e versioni successive.
0101100101

0

Il modo migliore è aggiungere:

    <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

Utilizzando le biblioteche. Questo è uno di questi. Basta aggiungere la sua dipendenza e inserire il codice seguente in xml prima di ogni elemento che necessita dell'effetto a catena:

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

4
oh per favore no, non è il modo migliore perché hai meno controllo su di esso ed è ampiamente supportato nello stesso SDK Android. Se qualcuno lo legge, ti consiglio di guardare il commento di @Bikesh o Karthik se vuoi controllare il colore.
Dion Segijn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.