【Android】组合动画简介

本文介绍了Android 5.0引入的默认动画组件,包括Touch feedback(触摸反馈)、Circular Reveal(圆形展示)、Curved motion(曲线运动)、View state changes(视图状态变化)和Activity transitions(活动转场)。详细讲解了RippleDrawable的使用、Circular Reveal的实现、自定义曲线动画以及状态切换动画。此外,还探讨了缓冲动画和插值器的运用,为Android动画设计提供了丰富的实践指导。
摘要由CSDN通过智能技术生成

Android系统提供的动画组件

除了最基本的帧动画、View动画和属性动画外,android还封装了一些动画方便开发者使用,当然这些动画自己也可以自定义实现的。(Android会在各个版本中提供一些新功能,去除过时的功能,所以动画知识也需要关注版本的改动)
下面就来介绍一下5.0中引入的默认动画组件:

Touch feedback 触摸反馈
Circular Reveal 圆形展示
Curved motion 曲线运动
View state changes 视图状态变化
Vector Drawables 矢量图动画(后续详细介绍)
Activity transitions 活动转场

Touch feedback
触摸反馈是指用户在触摸控件时的一种可视化交互,在Android L之前,通常是通过press色变来凸显,但是因为是瞬间变化的效果,不如动画生动。

在Android L使用了RippleDrawable类,用一个水波纹扩散效果在两种不同的状态间过渡。
使用Material Design样式的应用,button默认带有该效果。除了默认的效果外,在 5.0 之前系统还提供了另外两种效果,我们只把button的背景指定为:
?android:attr/selectableItemBackground
?android:attr/selectableItemBackgroundBorderless
任何view处于可点击状态,都可以使用RippleDrawable来达到水波纹特效。

我们也可以通过设置RippleDrawable的颜色属性来调节动画颜色,系统默认的颜色为主题的一个属性颜色:android:colorControlHighlight,所以我们可以通过修改该颜色值来统一修改默认的水波纹颜色。android:colorAccent可以修改checkbox的选中颜色,更多颜色设置请参考主题。
使用RippleDrawable
定义xml资源文件,使用标签来定义一个rippledrawable对象。Ripple有两种定义:一种带有边界约束,一种无边界约束。
带边界约束的定义需要在ripple标签内定义item,item可以指定图片、纯颜色、shape、selector资源等。
带有边界约束的ripple效果会收到item指定的内容的范围限制,只会在item的资源的范围显示波纹效果;
不带约束的ripple无需定义item直接设置color值即可。
不带约束的ripple的显示范围最大为当前view的父布局的边界。

约束1:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/ColorRipe">
    <item
        android:drawable="@color/colorBlack"/>
</ripple>

约束2:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/ColorRipe">
<item
android:id="@android:id/mask"
        android:drawable="@color/colorBlack"/>
</ripple>

上面两个都是约束ripple的定义,但是有点区别,一个item带有id且值为@android:id/mask一个没有。如果不设置id则item指定的资源就会显示为背景,这样对于一些默认为透明背景的view想要点击有波纹效果且要显示波纹显示的范围则不好实现,android则通过添加id则item在非点击的状态下不会显示item的资源。

代码创建
示例一:

/**
      * 功用:以代码的方式构建rippleDrawable为背景——没有设置mask
     */
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    private void initTv2RippleBG() {
   

        int[][] stateList = new int[][]{
   
                new int[]{
   android.R.attr.state_pressed},
                new int[]{
   android.R.attr.state_focused},
                new int[]{
   android.R.attr.state_activated},
                new int[]{
   }
        };

        //深蓝
        int normalColor = Color.parseColor("#303F9F");
        //玫瑰红
        int pressedColor = Color.parseColor("#FF4081");
        int[] stateColorList = new int[]{
   
                pressedColor,
                pressedColor,
                pressedColor,
                normalColor
        };
        ColorStateList colorStateList = new ColorStateList(stateList, stateColorList);

        RippleDrawable rippleDrawable = new RippleDrawable(colorStateList, null, null);
        rippleView.setBackground(rippleDrawable);
    }

示例二:

/**
     * 功用:以代码的方式构建rippleDrawable为背景——有drawable,但不设置mask
     */
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    private void initTv3RippleBG() {
   

        int[][] stateList = new int[][]{
   
                new int[]{
   android.R.attr.state_pressed},
                new int[]{
   android.R.attr.state_focused},
                new int[]{
   android.R.attr.state_activated},
                new int[]{
   }
        };

        //深蓝
        int normalColor = Color.parseColor("#303F9F");
        //玫瑰红
        int pressedColor = Color.parseColor("#FF4081");
        int[] stateColorList = new int[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值