8

Ho implementato un ReceylerView e non riesco a capire come ottenere il feedback tattile (l'effetto di ripple da esso).Come ottenere feedback tattile da RecyclerView?

Ecco quello che ho fatto per l'onClickListener:

holder.itemView.setOnClickListener(new OnClickListener(){ 

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

    }); 

E ho aggiunto sia cliccabile & attivabile al mio XML. Questo è ciò che la vista riciclatore gonfia:

<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

Questo è RelativeLayout non RecyclerView nel codice che hai fornito. http://stackoverflow.com/questions/24471109/recyclerview-onclick – Longi

+0

Questo è l'elemento che la visualizzazione del riciclatore si gonfia. Ho guardato quel link ma non riesco a trovare ciò che causa il feedback del tocco.Il clic funziona bene, è solo il tocco di feedback – Sree

+0

Ah, quindi è necessario impostare un rippledrawable come sfondo della relativelayout – Longi

risposta

25

È necessario impostare un drawable ondulazione come sfondo:

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

Potrebbe essere necessario maschera il 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> 

Questo creerà un semplice ripple grigio al tocco (ecco un guide se avete bisogno di ulteriori istruzioni).

RippleDrawable è stato aggiunto in SDK versione 21 (Lollipop). L'uso di Ripple drawable su pre-lollipop causerà il crash dell'applicazione. Utilizzare un semplice selettore su dispositivi pre-lollipop o utilizzare librerie che ricreano l'effetto. (GitHub)

UPDATE: È possibile ottenere l'effetto complessivo facilmente con questo pezzo di codice:

android:background="?attr/selectableItemBackground" 

o se non si desidera la maschera rettangolo:

android:background="?attr/selectableItemBackgroundBorderless" 

Questo è compatibile con i dispositivi pre-lecca-lecca e sarà un semplice selettore. Credo che questo creerà increspature di luce nelle app con tema scuro e viceversa, quindi se desideri un'ondulazione colorata personalizzata dovrai comunque creare un disegno ondulato.

+0

fantastico! grazie – Sree

+4

Per gli altri utenti che lo vedono, questo link potrebbe aiutarti anche: https://gist.github.com/AnderWeb/9672f5d81017429fd5fd – Sree

+2

'android: background ="? attr/selectableItemBackground "' funziona perfettamente. È esattamente la semplice risposta al tocco che volevo mostrare nel mio 'RecyclerView'. – praneetloke

1

Oltre a @ risposta di Longi: Se si desidera Voce dei vostri RecyclerViews di avere un proprio sfondo, e allo stesso tempo di avere l'effetto a catena, si può fare come mostrato nell'esempio seguente: 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 questo esempio @ drawable/recyclerview_item_background è una png nove patch, ma è possibile utilizzare qualsiasi sfondo qui.

Nel mio caso, quando ho usato Android: background =, radice del RecyclerView Oggetto layout lineare ha avuto l'effetto a catena, ma il bambino sfondo del layout lineare è stata sovrapponendosi in tal modo nascondere l'effetto a catena "attr/selectableItemBackground?".

Problemi correlati