Jak ustawić efekt tętnienia w widoku tekstu lub widoku obrazu na Androida?

127

Chcę ustawić efekt falowania w widoku tekstu i widoku obrazu w Android Studio. Jak mogę to zrobić?

Vasant
źródło
1
Najpierw wyjaśnij swoje pytanie. Czego właściwie potrzebujesz i czego próbowałeś do tej pory. Po prostu powiedzenie, że chcę efektu ripple, sprawia, że ​​jest to bardzo szerokie pytanie. Możesz również podać link do odniesienia do tego, czego chcesz. Zobacz także stackoverflow. com / help / how-to-ask
Anirudh Sharma
Właściwie chcę mieć efekt dla widoku tekstu i efektu zaznaczania / odznaczania widoku obrazu.
Vasant
czy próbowałeś szukać tego samego?
Anirudh Sharma

Odpowiedzi:

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
źródło
2
fajnie, że współpracowało ze mną na Lollipopie, ale w ten sposób dla której wersji Androida? i czy działa na pre-lollipopie?
Basheer AL-MOMANI
2
@Richard Rok temu miałem problem z KitKat (lub ICS) i odbiorniki kliknięć nie działały bez Androida: clickable = "true" dla tej wersji
DoruChidean
25
W nowoczesnych wersjach Androida jest to terazandroid:background="?android:attr/selectableItemBackground"
tmm1
2
Jak mogę tego użyć, gdy chcę mieć niestandardowe tło?
środa
3
Różnica między tym z / bez Borderless youtube.com/watch?v=wOjA8tS5sbc
Gibolt
82

Jeśli chcesz, aby tętnienie było powiązane z rozmiarem TextView / ImageView, użyj:

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

(Myślę, że wygląda lepiej)

Micro
źródło
2
Czy jest jakaś różnica w używaniu selectableItemBackgroundvsselectableItemBackgroundBorderless
rakesh kashyap
Nie wiem, dlaczego nie był ograniczony do granic i rozszerza się na cały layout
VSB
4
@rakeshkashyap różnica polega na tym, że selectableItemBackground zachowa tętnienie w ramach rozmiaru widoku (szerokość / wysokość). selectableItemBackgroundBorderless rozszerzy swoje tętnienie na inne widoki (takie jak ripple oficjalnej aplikacji kalkulatora)
Tudor
1
a także trzeba ustawić to >>> android: focusable = "true"
Amos
Pomocny. Dzięki.
Pooja
25

Proszę zapoznać się z poniższą odpowiedzią na efekt tętnienia.

ripple on Textview lub view:

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

ripple on Button lub Imageview:

android:foreground="?android:attr/selectableItemBackgroundBorderless"
Vasant
źródło
4
Proszę zauważyć, że selectableItemBackgroundBorderlessjest to API 21+. Poniżej możesz wybrać, selectableItemBackgroundaby uniknąć problemu ze zgodnością
StevenTB
10

Możesz użyć android-ripple-background

Rozpocznij efekt

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

Zatrzymaj animację:

rippleBackground.stopRippleAnimation();
IntelliJ Amiya
źródło
miły! czy istnieje wersja Kotlin tego?
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" />

dodaj to do rysowania

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

Spróbuj tego.

Karthik Sridharan
źródło
6

Spróbuj tego. To działa dla mnie.

android:clickable="true"
    android:focusable="true"
    android:background="?android:attr/selectableItemBackground"
Juboraj Sarker
źródło
1
Wspomniałem już o tym wcześniej ( stackoverflow.com/a/50347848/1954960 ), więc zamiast powodować zduplikowaną odpowiedź, kliknij kciuk w górę, dziękuję! :)
Zafer Celaloglu
5

Oprócz powyższych odpowiedzi dodano możliwość zaznaczenia, aby uniknąć ostrzeżenia edytora interfejsu użytkownika

android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
Zafer Celaloglu
źródło
4

W przypadku, gdy dobrze ocenione rozwiązanie opublikowane przez @Bikesh M Annur ( tutaj ) nie działa, spróbuj użyć:

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

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

Ponadto podczas korzystania z android:clickable="true"dodawania, android:focusable="true"ponieważ:

Widget, który został zadeklarowany jako klikalny, ale nie został zadeklarowany jako aktywny, nie jest dostępny za pomocą klawiatury ”.

Filipe Brito
źródło
3

Dodaj android:clickable="true" android:focusable="true"

Efekt falowania

android:background="?attr/selectableItemBackgroundBorderless"

Do wyboru efektu

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

Efekt przycisku

android:adjustViewBounds="true" style="?android:attr/borderlessButtonStyle"
silver_hawk
źródło
2

Oprócz odpowiedzi @Bikesh M Annur, pamiętaj o zaktualizowaniu bibliotek pomocy technicznej. Wcześniej używałem 23.1.1 i nic się nie działo. Aktualizacja do 23.3.0 załatwiła sprawę.

Mark Pazon
źródło
2

dla tętnienia koła: android:background="?attr/selectableItemBackgroundBorderless"

dla tętnienia prostokąta: android:background="?attr/selectableItemBackground"

Bita Mirshafiee
źródło
1

Lub możesz spróbować użyć tej biblioteki (Android 9+): RippleEffect

Integracja

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

Stosowanie:

<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
źródło
8
Używałem go przez dłuższy czas, ale już go nie polecam, chyba że celujesz w Androida 2.3. Jest błędny, opóźniony i generuje kod standardowy. A ponieważ obecnie 43% wszystkich urządzeń ma Androida 5 lub 6, możesz po prostu trzymać się selectableItemBackground, kierując się na Androida 4 lub nowszego.
0101100101
0

Najlepszym sposobem jest dodanie:

    <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" />
Jacek
źródło
-4

Korzystanie z bibliotek. To jest jeden z nich. Po prostu dodaj jego zależność i umieść poniższy kod w xml przed każdym elementem, który wymaga efektu ripple:

<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">
Amirhossein Naghshzan
źródło
4
och, proszę, nie, to nie jest najlepszy sposób, ponieważ masz mniejszą kontrolę nad nim i jest on szeroko obsługiwany w samym zestawie Android SDK. Jeśli ktoś to czyta, polecam spojrzeć na komentarz @Bikesh lub Karthik, jeśli chcesz kontrolować kolor.
Dion Segijn,