設置CardView水波紋效果
<android.support.v7.widget.CardView
android:id="@+id/news_list_card_view"
style="@style/cardStyle"
android:background="@drawable/item_selector"
android:clickable="true"
android:focusable="true"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">
</android.support.v7.widget.CardView>
cardview設置了背景選擇器,代碼如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/text_Grey" android:state_pressed="true"/>
<item android:drawable="@color/text_Grey" android:state_focused="true"/>
<item android:drawable="@color/colorWhite"/>
</selector>
發現並沒有效果,解決方案如下,給CardView添加個前景:
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
這樣就可以了,在5.0以上的設備上有點擊有波紋效果,5.0以下無波紋,只有前景色變化
自定義CardView前景
分爲5.0之前和之後兩種設置,因爲5.0之前沒有ripple,所以5.0之前採用inset 代替。
設置CardView自定義的前景:
android:foreground="@drawable/card_foreground"
5.0之後
drawable-v21/card_foreground.xml
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#20000000"
android:drawable="@drawable/card_foreground_selector" />
drawable-v21/card_foreground_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#18ffc400"/>
</shape>
</item>
<item android:state_focused="true" android:state_enabled="true">
<shape android:shape="rectangle">
<solid android:color="#0f000000"/>
</shape>
</item>
</selector>
效果:
5.0之前
drawable/card_foreground.xml
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/card_foreground_selector"
android:insetLeft="2dp"
android:insetRight="2dp"
android:insetTop="4dp"
android:insetBottom="4dp"/>
drawable/card_foreground_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#1838f508"/>
<corners android:radius="@dimen/card_radius" />
</shape>
</item>
<item android:state_focused="true" android:state_enabled="true">
<shape android:shape="rectangle">
<solid android:color="#0f000000"/>
<corners android:radius="@dimen/card_radius" />
</shape>
</item>
</selector>
效果:
直接設置selector也是可以的:
android:foreground="@drawable/card_foreground_selector"