相信大家肯定有過這樣的需求,給recyclerview的條目設置按下變色或者水波紋效果
1. 水波紋效果實現
1)系統效果
- 系統有界效果
在API 21以上使用,纔有波紋效果;API 21以下使用只有變色效果,沒有波紋效果
android:background="?android:attr/selectableItemBackground"
- 系統無界效果
在API 21以上才能使用,API 21以下會報錯無法編譯,最小版本要設置爲minSdkVersion 21
android:background="?android:attr/selectableItemBackgroundBorderless"
2)自定義效果在drawable
文件夾下新建 bg_change.xml 文件用於實現波紋效果。(僅限Android 5.0以上機型)
- 自定義有界效果
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/gray"> <!--波紋顏色-->
<item>
<shape android:shape="rectangle">
<!-- 填充背景色-->
<solid android:color="@color/white"/>
</shape>
</item>
</ripple>
- 自定義無界效果
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/gray"> <!--波紋顏色-->
</ripple>
- 自定義帶圖片效果
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/gray"> <!--波紋顏色-->
<item>
<selector>
<!-- 未點擊背景圖-->
<item
android:drawable="@drawable/normal_bg"
android:state_pressed="false" />
<!-- 點擊背景圖-->
<item
android:drawable="@drawable/select_bg"
android:state_pressed="true" />
</selector>
</item>
</ripple>
2. 按下變色效果
在drawable目錄下創建 bg_change.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white_color" android:state_pressed="false"/>
<item android:drawable="@color/red_color" android:state_pressed="true" />
</selector>
// android:drawable 可設置顏色跟圖片
//android:state_pressed="true" 代表按下
3. 在佈局中使用:
//設置背景
android:background="@drawable/bg_change"
但是有時候你會發現無論你怎麼設置都不起作用,
本文的關鍵點: 設置條目的點擊事件
本文的關鍵點: 設置條目的點擊事件
本文的關鍵點: 設置條目的點擊事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(holder.itemView.getContext(),"點擊了", Toast.LENGTH_SHORT).show();
}
});
到此你會發現按下效果已經出現了