Android开发中的水波纹效果实现

编写不易,如有转载,请声明出处: 梦回河口:http://blog.csdn.net/zxc514257857/article/details/73200900

前言

  android中的水波纹效果是5.0以后即API Level 21以后出现的,因此minSdkVersion必须设置在21及以上才可以使用此效果

Demo效果展示

  • 5.0以上版本手机:

  • 5.0以下版本适配:
    Android开发中的水波纹效果实现_第1张图片

水波纹效果实现

  • 系统中提供了水波纹效果的实现方法即在布局界面调用以下代码即可
// 系统提供的水波纹效果(有界/不能改颜色)
android:background="?android:selectableItemBackground"
// 系统提供的水波纹效果(无界/不能改颜色)
android:background="?android:selectableItemBackgroundBorderless"
  • 自定义的水波纹效果(有界/白色)
// background的根节点使用ripple(波纹)即可
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/ripple">
            
    <item>
        <shape>
            
            <solid android:color="@color/white"/>
        shape>
    item>
ripple>
  • 自定义的水波纹效果(无界/白色)
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/ripple">
        
ripple>
  • 自定义的水波纹效果(有界/彩色)
      将自定义的水波纹效果(有界/白色) 的颜色代码改一下就可以了

  • 自定义的水波纹效果(无界/彩色)
      将自定义的水波纹效果(无界/白色) 的颜色代码改一下就可以了

  • 自定义的水波纹效果(有界/彩色/圆角)

// 即在自定义的水波纹效果(有界/彩色)代码中添加corners节点 
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/colorAccent">
            
    <item>
        <shape>
            
            <solid android:color="@color/colorPrimaryDark"/>
            
            <corners android:radius="30dp"/>
        shape>
    item>
ripple>

5.0以下版本适配

  为了目前已经实现了5.0以上即API Level 21 以上版本的正常显示问题,但API Level 21以下版本是没有水波纹效果的,这一套布局无法实现全部需求,需要针对API Level 21 以下版本再写一套布局,因此需在res目录下新建一个drawable-v21文件夹放置只能API Level 21 以上版本才能使用的布局,drawable文件夹放置API Level 21 以下版本使用的布局和都可使用的布局。这样,android 5.0版本及以上手机先在drawable-v21文件夹找布局,再到drawable文件夹找布局,找不到就报错;android 5.0版本以下手机在drawable文件夹找布局

  • 系统提供属性的适配
// 系统提供的水波纹效果(有界/不能改颜色)
android:background="?android:selectableItemBackground"

  系统已实现了适配,5.0以上是水波纹效果,5.0以下是带选择器的按钮效果

// 系统提供的水波纹效果(无界/不能改颜色)
android:background="?android:selectableItemBackgroundBorderless"

  系统没有实现适配,5.0以下无法使用
Android开发中的水波纹效果实现_第2张图片

  • 自定义效果适配(就是写一些状态选择器,我只以 自定义的水波纹效果(有界/白色) 进行适配,具体见文末Demo代码)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item android:drawable="@color/white" android:state_window_focused="false" />
    
    <item android:drawable="@color/ripple" android:state_focused="true" android:state_pressed="true" />
    
    <item android:drawable="@color/ripple" android:state_focused="false" android:state_pressed="true" />
    
    <item android:drawable="@color/ripple" android:state_selected="true" />
    
    <item android:drawable="@color/ripple" android:state_focused="true" />
selector>

Demo下载请移步:http://download.csdn.net/detail/zxc514257857/9870032


———-因本人才疏学浅,如博客或Demo中有错误的地方请大家随意指出,与大家一起讨论,共同进步,谢谢!———-

你可能感兴趣的:(Android开发中的水波纹效果实现)