Android动画<第五篇>:触摸反馈动画

触摸反馈在用户和UI元素交互的点提供瞬时视觉确认。例如,当按钮被触摸时显示一个水波纹效果。 这是 Android 5.0 默认的触摸反馈动画。

下图就是一个按钮默认的触摸反馈动画--水波纹动画

19.gif
(1)系统自带的两个 Ripple 波纹效果
//有边界
?android:attr/selectableItemBackground
//无边界 (要求API21以上)
?android:attr/selectableItemBackgroundBorderless 

使用时只需要把上面这两个值作为 View 的 android:background="" 或 android:foreground="" 即可(如果已经有背景, 可以设置到前景属性中)。同时如果想要效果显示出来要保证 View 是可点击的(比如控件本身可点击、或者给控件设置点击事件、 或给控件设置 android:clickable="true")。

动画的颜色是系统默认的,您可以手动去设置这个颜色值,只需要在AppTheme添加如下属性即可:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:colorControlHighlight">#B8BD8B</item>
</style>

效果如下:

20.gif
(2)自定义 Ripple 波纹效果

[无边界]

在drawable中添加ripple_ani.xml文件

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:radius="50dp"
    android:color="#4285f4">
</ripple>

在按钮中设置背景:

    <Button
        android:id="@+id/bt_recycleview"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_centerInParent="true"
        android:textSize="14sp"
        android:background="@drawable/ripple_ani"
        android:layout_centerHorizontal="true"
        android:text="111"/>

ripple只能运用于Android5.0之后的版本,所以还请在drawable-v21中做适配

图片.png

效果如下:

21.gif

上图是没有边界的效果,无边界的ripple会覆盖按钮原本的背景颜色,所以上图是看不到按钮的背景色的,那么为ripple添加边界的效果是怎样的呢?

[有边界]

在布局中添加边界

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:radius="50dp"
    android:color="#4285f4">

    <!-- 添加边界 -->
    <item android:drawable="@color/colorPrimary"/>

</ripple>

效果如下:

22.gif
(3)结合selector
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:radius="50dp"
    android:color="#4285f4">

    <!-- 添加边界 -->
    <item>
        <selector>
            <item
                android:drawable="@color/bt_1"
                android:state_pressed="true">
            </item>
            <item
                android:drawable="@color/bt_2"
                android:state_pressed="false">
            </item>
        </selector>
    </item>

</ripple>

效果如下:

23.gif
(4)结合shape
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:radius="50dp"
    android:color="#4285f4">

    <!-- 添加边界 -->
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="20dp"/>
            <solid android:color="@color/bt_2"/>
        </shape>
    </item>

</ripple>

效果如下:

24.gif
(5)注意点

ripple是在Android5.0之后才有的,我们需要做一下兼容

就拿第四点来举例。

在drawable-v21目录下新建文件ripple_ani.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:radius="50dp"
    android:color="#4285f4">

    <!-- 添加边界 -->
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="20dp"/>
            <solid android:color="@color/bt_2"/>
        </shape>
    </item>

</ripple>

在drawable目录下新建文件ripple_ani.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="20dp"/>
    <solid android:color="@color/bt_2"/>
</shape>
参考

https://github.com/OCNYang/Android-Animation-Set/tree/master/ripple-animation

[本章完...]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容