Samoy的小窝


一只默默工作的程序猿


欢迎光临Samoy的小屋

Android的三种动画

先看一下动画的效果: 动画效果

Android的动画分为三种,分别为帧动画、补间动画和属性动画。下面说一下各种动画的特点。

1. 帧动画

帧动画就是指将图片逐帧的播放出来,在src/main/res/drawable目录下添加animation_frame.xml文件(xml实现方式,实现红、绿、蓝、的切换):

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@android:color/holo_red_dark"
        android:duration="500" />
    <item
        android:drawable="@android:color/holo_green_dark"
        android:duration="500" />
    <item
        android:drawable="@android:color/holo_blue_dark"
        android:duration="500" />
</animation-list>

2. 补间动画

补间动画的特点是将开始帧和结束帧给出,系统自动计算动画的播放,下面是用xml实现的缩放动画:

<?xml version="1.0" encoding="utf-8"?><!--从0放大到原始大小-->
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXScale="0"
    android:fromYScale="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="100%"
    android:toYScale="100%" />

其中duration属性表示动画持续时长,fromXScale表示开始时x轴的形变量,fromYScale表示开始时y轴的形变量,toXScaletoYScale表示结束时的x轴和y轴的形变量,pivotXpivotY表示缩放的锚点,也就是说指定围绕那个点进行缩放的。

3. 属性动画

帧动画和补间动画都没有将View的属性进行改变,而属性动画则是将View的属性进行改变而产生的动画,因此这样View的属性也就永久的改变了,通过属性动画,我们可以实现比较复杂的动画。下面是用xml实现的组合动画:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="together">
    <objectAnimator
        android:duration="1000"
        android:propertyName="translationX"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="200"
        android:valueType="floatType" />
    <objectAnimator
        android:duration="1000"
        android:propertyName="rotation"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="360"
        android:valueType="floatType" />
    <set>
        <objectAnimator
            android:duration="1000"
            android:propertyName="scaleX"
            android:repeatCount="1"
            android:repeatMode="reverse"
            android:valueFrom="1.0f"
            android:valueTo="2.0f"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="1000"
            android:propertyName="scaleY"
            android:repeatCount="1"
            android:repeatMode="reverse"
            android:valueFrom="1.0f"
            android:valueTo="2.0f"
            android:valueType="floatType" />
    </set>
</set>

这三种动画都可以使用代码实现,这里就留给读者自己去考虑咯。

这个是动画Demo(使用kotlin编写)的项目地址:https://github.com/Samoy/AnimationDemo

欢迎在评论区留下您的见解~
最近的文章

一些React第三方库收藏

1.Ant官网收集的库Ant官网已经收集许多react组件.地址:https://ant.design/docs/react/recommendation-cn 2.reduxredux是一个js的数据处理库,与react并无联系,但是可与react连接起来使用,所使用的库为为:react-reduxGithub地址:https://github.com/reduxjs/react-redux 3.RxJSRxJS是ReactiveX的js版本,有关ReactiveX的介绍请参考其...…

Web
更早的文章

初始Redux

先来看下通过Redux实现的实例吧:这个Demo的功能很简单,通过三个按钮实现<Text></Text>组件的文本变换,当点击”增加”按钮时,我们会新增一篇”日记”,内容为”This is a new article.”,当点击”修改”时,”日记”会更改为”This article is modified.”,当点击”删除”按钮时,会将这篇”日记”删除,文本会设置为空字符串。然后我们再看以下具体是怎么实现的吧: 首先Redux的思想是将数据也页面分离,因此只有大型...…

Web