8

Zaimplementowałem ReceylerView i nie mogę wymyślić, jak uzyskać informację zwrotną dotykową (efekt ripple z niego).Jak uzyskać informację zwrotną dotykową z RecyclerView?

Oto co zrobiłem dla onClickListener:

holder.itemView.setOnClickListener(new OnClickListener(){ 

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

    }); 

I dodałem zarówno klikalny & aktywowana do mojego XML. To właśnie widok recyklingowa nadmuchuje:

<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

To jest RelativeLayout a RecyclerView w podanym kodzie. http://stackoverflow.com/questions/24471109/recyclerview-onclick – Longi

+0

To jest przedmiot, który podnosi widok recyklera. Spojrzałem na ten link, ale nie mogę znaleźć przyczyny wywołania reakcji dotykowej.Kliknięcie działa dobrze, to tylko dotykowy feedback – Sree

+0

Ah, musisz ustawić rippledrawable jako tło względnegolayout – Longi

Odpowiedz

25

Musisz ustawić tętnienia rozciągliwej jako tło:

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

może trzeba maskować drawable:

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

Stworzy to proste szare tętnienie po dotknięciu (tutaj jest guide, jeśli potrzebujesz więcej instrukcji).

RippleDrawable został dodany w wersji SDK 21 (Lollipop). Używanie Ripple drawable na pre-Lollipop spowoduje awarię aplikacji. Użyj prostego selektora na urządzeniach pre-Lollipop lub użyj bibliotek, które odtwarzają efekt. (GitHub)

UPDATE: Można uzyskać efekt fali łatwo z tego kawałka kodu:

android:background="?attr/selectableItemBackground" 

lub jeśli nie chcesz maskę prostokąt:

android:background="?attr/selectableItemBackgroundBorderless" 

ten jest kompatybilny z urządzeniami pre-Lollipop i będzie dla nas prostym selektorem. Wierzę, że stworzy to lekkie zmarszczki w aplikacjach z ciemnym motywem i na odwrót, więc jeśli chcesz mieć niestandardowe kolorowe tętnienia, nadal będziesz potrzebował tworzyć marszczyć zbieralne.

+0

niesamowite! dzięki – Sree

+4

Dla innych osób, które to widzą, ten link może ci również pomóc: https://gist.github.com/AnderWeb/9672f5d81017429fd5fd – Sree

+2

"Android: background ="? attr/selectableItemBackground "' działa idealnie. To jest właśnie prosta informacja dotykowa, którą chciałem pokazać w moim "RecyclerView". – praneetloke

1

Oprócz @ odpowiedź Longi: jeśli chcesz pozycja swoich RecyclerViews by mieć swoje własne tło, a jednocześnie mieć efekt fali, można to zrobić, jak pokazano w poniższym przykładzie: 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> 

W tym przykładzie @ odkształcalne/recyclerview_item_background jest png dziewięć-łata, ale można użyć dowolnego tła tutaj.

W moim przypadku, gdy użyłem Android: t =, korzenia RecyclerView elementu Układ liniowy miał efekt fali, ale dziecko layout Linear tło zostało nakładających się więc ukrywanie efekt fali „attr/selectableItemBackground?”.

Powiązane problemy