android ripple & overlay

463 阅读1分钟

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’