1. 程式人生 > >Android給CardView加邊框以及水波紋效果

Android給CardView加邊框以及水波紋效果

最近開發App遇到一個效果,先看效果如下圖,就是列表中item每個都是CardView,然後cardView有一個邊框紅色或者其他顏色,還需要item點選有水波紋效果。
這裡寫圖片描述

設定邊框,圓角等我們很自然的想到了shape,先定義shape,

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="5dp"
/>
<stroke android:width="2dp" android:color="@color/color_red"/> <solid android:color="#ffffff" /> </shape>

然後設定android:background=”@drawable/shape_red_border_white_bg”,這樣就可以了。但是水波紋呢,水波紋我們一般也是用的background屬性:android:background=”?attr/selectableItemBackground”,這樣就衝突了,好在還有一個屬性叫foreground。我們在加一行android:foreground=”?attr/selectableItemBackground”就行了,既可以設定背景shape,又可以設定水波紋

View原始碼中的一段
case R.styleable.View_foreground:
if (targetSdkVersion >= VERSION_CODES.M || this instanceof FrameLayout) {
setForeground(a.getDrawable(attr));
}
break;
從上面程式碼可以看出,foreground屬性只有在以下兩種情況下生效:
1. 安卓M版本(6.0)及以上
2. FrameLayout本身及其子類