RecyclerView item按下变色效果+水波纹效果

混江龙づ霸主 提交于 2020-03-01 16:18:42

相信大家肯定有过这样的需求,给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();
                }
            });

 


到此你会发现按下效果已经出现了

 
————————————————
版权声明:本文为CSDN博主「水样_年华」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q714093365/article/details/77054080

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!