RecyclerView item按下變色效果+水波紋效果

相信大家肯定有過這樣的需求,給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();
                }
            });

 


到此你會發現按下效果已經出現了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章