2016-04-19 30 views
0

Ich bin mitsich allmählich ausbreitende Wirkung auf recyclerview Artikel

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

Kräuselungeffekt hinzufügen, wenn Elemente eines recyclerview berührt werden. Ich zeige eine Aktionsleiste an, wenn ein Listenelement lange geklickt wird. Das Element ist jedoch nicht mehr markiert. Ich benutzte einen Selektor, um

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_selected="true"> 
    <shape> 
     <solid android:color="@color/selector"/> 
    </shape> 
</item> 

<item android:state_pressed="true"> 
    <shape> 
     <solid android:color="@color/selector"/> 
    </shape> 
</item> 

<item> 
    <shape> 
     <solid android:color="@android:color/transparent"/> 
    </shape> 
</item> 
</selector> 

als Hintergrund zu haben, um das ausgewählte Element zu markieren, sondern weil ich die Welligkeit Animation haben wollte ich für die selectableItemBackground Sachen gegangen sind. Es gibt einige Posts, die zeigen, wie man eine Ripple-Datei in einem Ordner mit 21 Dateierweiterungen speichert. Das Ripple-Tag ist jedoch nur mit API Level 21 und höher verfügbar. Da ich eine hellere Geräteabdeckung als nur API-Level 21 und höher haben möchte, war ich am Wandern, ob es einen anderen gibt, um meinen Selektor mit dem Ripple-Zeug zu kombinieren.

Dank

Antwort

0

Ich habe einen netten Trick zu lösen mein Problem mit FrameLayout gefunden.

Das Layout für recyclerview Artikel sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:background="@drawable/selector" 
    android:orientation="vertical"> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent" 
        android:layout_height="0dp" 
        android:layout_marginLeft="@dimen/activity_horizontal_margin" 
        android:layout_weight="1" 
        android:gravity="center_vertical" 
        android:orientation="vertical"> 

     <TextView 
      android:id="@+id/name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ellipsize="marquee" 
      android:singleLine="true" 
      android:textColor="@color/modelTitelColor" 
      android:textStyle="bold"/> 

     <TextView 
      android:id="@+id/objects" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ellipsize="marquee" 
      android:singleLine="true" 
      android:textColor="@color/cardview_background" 
      android:textStyle="normal"/> 
    </LinearLayout> 


    <View 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:background="?android:attr/listDivider"/> 
</LinearLayout> 

<View 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="?android:attr/selectableItemBackground"/> 
</FrameLayout> 

Der Trick ist, die Wähler als Hintergrund des inneren Linearlayout zu setzen und den berühmten selectedItemBackground für die Ansicht innerhalb des FrameLayout zu verwenden.

Verwandte Themen