1、ripple
作用是让view点击时产生水波纹效果,水波纹的扩散颜色在ripple中定义;view的默认颜色、扩散边界、背景图等在item中定义;无边界水波纹可以不定义item节点。
方式一:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#f2f2f2">
<item
android:id="@android:id/mask"
android:drawable="@drawable/bg_corner16_white" />
</ripple>
bg_corner16_white
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white"/>
<corners android:radius="@dimen/x16"/>
</shape>
方式二:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#30000000">
<item>
<shape>
<corners android:radius="@dimen/x16"/>
<solid android:color="@color/bc_theme_blue"/>
</shape>
</item>
</ripple>
这两种写法效果一样,区别于item中的shape直接定义或引用其他xml的内容。
也可以在item中写selector控制例如是否按下的单独效果。
2、overlay
作用是在view上覆盖一个蒙层,实现点击效果,例如未点击时蒙层为透明色,点击时为透明度20%的黑色。
蒙层的selector_pressed_overlay.xml文件必须写在color目录下;
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#33000000"/>
<item android:color="#00000000" />
</selector>
在使用的view中引用蒙层文件,以下四个属性都是必须的。
<TextView
...
android:background="@drawable/xxx"
android:backgroundTintMode="src_atop"
android:backgroundTint="@color/selector_pressed_overlay"
android:clickable="true" />
对于recyclerview中的item按下效果,backgroundTintMode需定义为‘src_over’