Android 动画学习总结

动画是移动开发中不可或缺的一部分,要想让用户有不一样的App体验,难么就为你的App加上动画吧!

Android中动画主要分为三种:View动画,图片动画(Frame动画,也叫帧动画),属性动画。

  • View动画:View动画支持四种动画效果,分别是位移,旋转,缩放和透明度动画。
  • 帧动画:透过顺序播放一系列的图片从而产生的动画。
  • 属性动画:API11的新特性,可以对任何Object做的动画。

本篇主要学习View动画和帧动画。

1.1 View动画的创建

创建View动画需要在res/目录下新建anim目录,如下所示:
右键点击res目录:

创建目录

右键点击anim目录>New>Animation resource file,输入文件名字,确定,至此一个空的View动画的xml文件已经创建完成,接下来是时候开始撸代码!

1.2 View动画XML语法

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:shareInterpolator="true">
    <translate
        android:fromXDelta="float"
        android:fromYDelta="float"
        android:toXDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:pivotX="float"
        android:pivotY="float"
        android:toDegrees="float" />
    <scale
        android:fromXScale="float"
        android:fromYScale="float"
        android:pivotY="float"
        android:pivotX="float"
        android:toXScale="float"
        android:toYScale="float"/>
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <set>
        <!--这里还可以添加另一个动画的集合-->
    </set>
</set>
<?xml version="1.0" encoding="utf-8"?>
<!--单独一个动画的写法-->
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:duration="3000"
    android:fromXDelta="float"
    android:fromYDelta="float"
    android:toXDelta="float"
    android:toYDelta="float"/>

上边的代码写的是一个动画的集合,set标签表示动画的集合,他可以包含若干个动画。这里的set标签中包含了两个属性 interpolator和shareInterpolator,其中interpolator含义为动画所采用的插值器,插值器将影响动画的速度,这里所用的@android:anim/decelerate_interpolator 意思就是减速插值器。Android内置了很多种插值器的实现,需要的同学去搜一下,这里不一一阐述了,shareInterpolator表示集合中的动画是否和集合共享同一个插值器。如果集合没有指定插值器,则子动画就需要单独指定插值器或者使用默认值。

下边则是单独动画的常用写法。

其中,子标签中属性含义如下:

  • android:fromXDelta 表示x坐标的起始值,可填有一下几种,整形,浮点型,或100%(表示自身的100%,也就是从View自己的位置开始),50%p(表示父层View的50%,是以它父层View为参照的)
  • android:fromYDelta 表示y坐标的起始值,填值同上
  • android:toXDelta 表示x坐标的起始值,填值同上
  • android:toYDelta 表示y坐标的起始值,填值同上
  • fromXScale,fromYScale 分别表示水平和竖直方向上的起始值,0.0为不显示,1.0为正常大小,具体指根据自己的需要填写。
  • toXScale,toYScale 分别表示水平和竖直方向上的结束值。
  • privotX,privotY 分别表示轴点的x,y坐标,有关轴点的含义在下方会进行讲解。
  • fromDegrees,toDegrees 分别表示旋转开始和结束的角度,可填值如0,180等
  • fromAlpha,toAlpha 分别表示透明度的起始和结束的值,透明度的取值范围为0.0~1.0
  • android:duration 表示动画的持续时间,可填值如2000 表示此动画持续2s
  • android:fillAfter 动画结束以后View是否停留在结束位置,true表示停留,false表示不停留。

    在 scale 动画和 rotate 动画中我们提到了轴点的概念,轴点我们怎么理解呢,打个比方,在缩放动画中默认轴点为View的中心,也就是说进行缩放动画时,View会向左右两边同时进行缩放,如果设置了轴点为View的左边界,那么缩放动画就会只向右边界缩放。同理,旋转动画的轴点默认为中心位置。 对于轴点对动画的影响还是建议大家取不同的值多试一试。

1.3 View动画的使用

在需要使用的地方:

Animation animation = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.view_animation);
view.startAnimation(animation);

2 帧动画

首先我们需要通过XML来定义一个AnimationDrawable,创建的步骤是右键点击drawable目录>new>drawable resource file 输入文件名确认,xml代码示例如下所示:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/a" android:duration="200"/>
    <item android:drawable="@mipmap/c" android:duration="200"/>
    <item android:drawable="@mipmap/e" android:duration="200"/>
    <item android:drawable="@mipmap/g" android:duration="200"/>
    <item android:drawable="@mipmap/i" android:duration="200"/>
    <item android:drawable="@mipmap/k" android:duration="200"/>
    <item android:drawable="@mipmap/m" android:duration="200"/>
    <item android:drawable="@mipmap/o" android:duration="200"/>
    <item android:drawable="@mipmap/q" android:duration="200"/>
</animation-list>

然后将上述的Drawable作为View的背景并通过Drawable来播放动画即可:

imageView.setBackgroundResource(R.drawable.charge__bg);
 AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
        animationDrawable.start();

帧动画的使用就这么简单,但是比较容易引起OOM,所以在使用的时候尽量避免使用尺寸较大的图片。

以上就是View动画和帧动画的学习总结,下一篇我会学习总结属性动画的有关知识

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值