8

Ich habe eine ReyylerView implementiert und ich kann nicht herausfinden, wie man Berührungsrückmeldung bekommt (der Welleneffekt davon).Wie bekomme ich Touch-Feedback von RecyclerView?

Hier ist, was ich für die OnClickListener tat

holder.itemView.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      //start Intent 
     } 

    }); 

Und fügte ich beide klickbare & fokussierbarem meiner XML. Dies ist, was die Recycler Ansicht aufbläst:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:clickable="true" 
android:focusable="true" 
android:padding="4dp" > 
+0

Das ist RelativeLayout nicht RecyclerView in dem Code, den Sie angegeben haben. http://stackoverflow.com/questions/24471109/recyclerview-onclick – Longi

+0

Das ist das Element, das Recycler-Ansicht aufbläht. Ich habe mir diesen Link angesehen, aber ich kann nicht herausfinden, was das Touch-Feedback verursacht.Das Klicken funktioniert gut, es ist nur die Touch-Feedback – Sree

+0

Ah, dann müssen Sie eine Rippledrawable als Hintergrund des Relativelayout setzen – Longi

Antwort

25

Sie haben eine Welligkeit ziehbar als Hintergrund einstellen:

android:background="@drawable/ripple" 

ripple.xml:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#ffa0a0a0"/> 

Sie müssen möglicherweise zu maskieren Sie das Zeichen:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#ffa0a0a0"> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#ffa0a0a0"/> 
     </shape> 
    </item> 
</ripple> 

Dies erzeugt eine einfache graue Welligkeit bei Berührung (hier ist ein guide, wenn Sie weitere Anweisungen benötigen).

RippleDrawable wurde in SDK Version 21 (Lollipop) hinzugefügt. Die Verwendung von Ripple, das auf Pre-Lollipop gezeichnet werden kann, führt zum Absturz der App. Verwenden Sie entweder einen einfachen Selektor für Pre-Lollipop-Geräte oder verwenden Sie Bibliotheken, die den Effekt neu erstellen. (GitHub)

UPDATE: Sie können die Wellen-Effekt bekommen einfach mit diesem Stück Code:

android:background="?attr/selectableItemBackground" 

oder wenn Sie nicht möchten, dass das Rechteck-Maske:

android:background="?attr/selectableItemBackgroundBorderless" 

Diese ist kompatibel mit Pre-Lollipop-Geräten und wird uns einen einfachen Selektor geben. Ich glaube, das wird helle Wellen in Apps mit dunklem Thema erzeugen und umgekehrt, also wenn du eine benutzerdefinierte farbige Welligkeit willst, musst du immer noch eine wellige Zeichenkette erstellen.

+0

genial! Danke – Sree

+4

Für andere Leute, die dies sehen, könnte dieser Link auch Ihnen helfen: https://gist.github.com/AnderWeb/9672f5d81017429fd5fd – Sree

+2

Die 'android: background ="? attr/selectableItemBackground "funktioniert perfekt. Es ist genau das einfache Touch-Feedback, das ich in meinem 'RecyclerView' zeigen wollte. – praneetloke

1

Neben @ Longi Antwort: Wenn Sie Ihre RecyclerViews des Artikels wollen einen eigenen Hintergrund haben, und zugleich die Welligkeit Wirkung zu haben, können Sie in dem Beispiel, wie gezeigt tun unter: recycler_view_item.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/recyclerview_item_background"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="?attr/selectableItemBackgroundBorderless"> 
     ... 
    </LinearLayout> 
</LinearLayout> 

In diesem Beispiel @ ziehbar/recyclerview_item_background eine png neun-Patch ist, aber Sie alle Hintergrund hier verwenden können.

In meinem Fall, wenn ich verwendet android: Hintergrund =, die Wurzel des RecyclerView Artikel Linear-Layout haben die sich allmählich ausbreitende Wirkung haben, aber das Kind Linear-Layout der Hintergrund wurde überlappend damit die sich allmählich ausbreitende Wirkung versteckt „attr/selectableItemBackground?“.

Verwandte Themen