Wie kann ich einen Welleneffekt auf die Textansicht oder die Bildansicht unter Android einstellen?


127

Ich möchte einen Welleneffekt auf die Text- und Bildansicht in Android Studio einstellen. Wie kann ich es tun?


1
Bitte erläutern Sie zuerst Ihre Frage. Was Sie tatsächlich benötigen und was Sie bisher versucht haben. Wenn Sie einfach sagen, dass ich einen Welleneffekt möchte, ist dies eine sehr breite Frage. Sie können auch einen Link als Referenz für das, was Sie möchten, angeben.
Anirudh Sharma

Eigentlich möchte ich einen Effekt für die Textansicht und die Bildansicht zum Auswählen / Deaktivieren des Effekts.
Vasant

Haben Sie versucht, nach dem gleichen zu suchen?
Anirudh Sharma

Antworten:


274

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
Schön, dass es bei mir auf Lollipop funktioniert hat, aber auf diese Weise für welche Android Android-Version? und funktioniert es auf Pre-Lollipop?
Basheer AL-MOMANI

2
@ Richard Ich hatte vor einem Jahr ein Problem mit KitKat (oder ICS) und Klick-Listener funktionierten nicht ohne Android: clickable = "true" für diese Version
DoruChidean

25
Auf modernen Versionen von Android ist dies jetztandroid:background="?android:attr/selectableItemBackground"
tmm1

2
Wie kann ich das verwenden, wenn ich einen benutzerdefinierten Hintergrund haben möchte?
Mrid

3
Der Unterschied zwischen diesem mit / ohne Borderless youtube.com/watch?v=wOjA8tS5sbc
Gibolt

81

Wenn Sie möchten, dass die Welligkeit an die Größe von TextView / ImageView begrenzt wird, verwenden Sie:

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

(Ich denke es sieht besser aus)


2
Gibt es einen Unterschied in der Verwendung von selectableItemBackgroundvsselectableItemBackgroundBorderless
Rakesh Kashyap

Ich weiß nicht, warum es nicht an Grenzen gebunden war und sich durch das gesamte Layout ausdehnte
VSB

4
@rakeshkashyap Der Unterschied besteht darin, dass durch selectableItemBackground die Welligkeit innerhalb der Ansichtsgröße (Breite / Höhe) bleibt. selectableItemBackgroundBorderless erweitert seine Welligkeit gegenüber anderen Ansichten (wie der offiziellen Rechner-App-Welligkeit)
Tudor

1
und müssen auch dieses >>> android setzen: focusable = "true"
Amos

25

Bitte beziehen Sie sich auf die Antwort für den Welleneffekt.

Welligkeit in der Textansicht oder Ansicht:

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

Welligkeit auf Button oder Imageview:

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

4
Bitte beachten Sie, dass dies selectableItemBackgroundBorderlessAPI 21+ ist. Unten können Sie wählen selectableItemBackground, um Kompatibilitätsprobleme zu vermeiden
StevenTB

9

Sie können Android-Ripple-Hintergrund verwenden

Effekt starten

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

Animation stoppen:

rippleBackground.stopRippleAnimation();

nett! Gibt es eine Kotlin-Version davon?
Ingenieur

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

füge dies in drawable hinzu

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

Versuche dies.



4

Zusätzlich zu den obigen Antworten wird fokussierbar hinzugefügt, um die Warnung des UI-Editors zu vermeiden

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

3

Wenn die von @Bikesh M Annur ( hier ) veröffentlichte, gut gewählte Lösung für Sie nicht funktioniert, versuchen Sie Folgendes :

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

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

Auch bei Verwendung von android:clickable="true"add android:focusable="true"weil:

" Auf ein Widget, das als anklickbar, aber nicht als fokussierbar deklariert wurde, kann nicht über die Tastatur zugegriffen werden. "


3

Hinzufügen android:clickable="true" android:focusable="true"

Für Welligkeitseffekt

android:background="?attr/selectableItemBackgroundBorderless"

Für wählbaren Effekt

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

Für Button-Effekt

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

2

Aktualisieren Sie zusätzlich zur Antwort von @Bikesh M Annur unbedingt Ihre Support-Bibliotheken. Zuvor habe ich 23.1.1 verwendet und nichts ist passiert. Das Update auf 23.3.0 hat es geschafft.


1

Oder Sie können versuchen, diese Bibliothek (Android 9+) zu verwenden: RippleEffect

Integration

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

Verwendung:

<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
Ich habe es ziemlich lange benutzt, aber ich empfehle es nicht mehr, es sei denn, Sie zielen auf Android 2.3. Es ist fehlerhaft, verzögert und erzeugt Boilerplate-Code. Und da zu diesem Zeitpunkt 43% aller Geräte über Android 5 oder 6 verfügen, können Sie sich nur an selectableItemBackgroundAndroid 4 und höher halten.
0101100101

1

für Kreiswelligkeit: android:background="?attr/selectableItemBackgroundBorderless"

für Rechteckwelligkeit: android:background="?attr/selectableItemBackground"


0

Der beste Weg, es hinzuzufügen:

    <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

Bibliotheken verwenden. Dies ist einer von ihnen. Fügen Sie einfach die Abhängigkeit hinzu und fügen Sie den folgenden Code in XML vor jedem Element ein, das einen Welleneffekt benötigt:

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

3
Oh bitte nein, es ist nicht der beste Weg, weil Sie weniger Kontrolle darüber haben und es im Android SDK selbst weitgehend unterstützt wird. Wenn jemand dies liest, empfehle ich, entweder den Kommentar von @Bikesh oder Karthik zu lesen, wenn Sie die Farbe steuern möchten.
Dion Segijn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.