android 动画_Android怎么做动画?

Android的动画分为了三种,分别是帧动画、补间动画、属性动画。其中,帧动画和补间动画是传统动画,而属性动画Android3.0 之后出现的。 本文因为篇幅主要是简单介绍三大动画,更多参数和详细用法可以参考Android官方文档。

帧动画

逐帧动画是一种常见的动画形式(Frame By Frame),其原理简单的说,就是将动作分解成若干单独的图片,在同一个地方,按顺序连贯播放该组图片。分解的越多,动作效果越好,但相应的需要消耗更多的性能。 下面是一组僵尸走路的图片:

640?wx_fmt=png

在res/rawable目录下创建一个action.xml,将图片放入。

640?wx_fmt=png

上述xml中,有些属性我们需要了解:

  • 每一个item是一张图片

  • android:drawable  图片的相对位置

  • android:duration   图片的持续时间

  • android:oneshot   表示是否重复播放动画,还是只播放一次

在Activity中添加代码,创建一个ImageView,用AnimationDrawable播放动画。

640?wx_fmt=png

实际效果如下:

补间动画

补间动画又称view动画,他不需要像帧动画那样每一幅图片都是事先准备好的。我们需要一个view对象,设置好它开始和结束的位置,中间的view会自动由系统补齐。其中有4种基本形式:

640?wx_fmt=png

  • 补间动画一般会采用xml 文件的形式;代码会更容易书写和阅读,同时也更容易复用。

平移动画

640?wx_fmt=png

参数分别是:

  •     fromXDelta :视图在水平方向x 移动的起始值

  •     toXDelta :视图在水平方向x 移动的结束值

  •     fromYDelta :视图在竖直方向y 移动的起始值

  •     toYDelta:视图在竖直方向y 移动的结束值

透明度动画

640?wx_fmt=png

参数分别是:

  •        fromAlpha:视图透明度的起始值

  • toAlpha:视图透明度的结束值

  • duration: 动画持续时间

  • interpolator:可以控制动画的变化速率 ,就是动画进行的快慢节奏。Android 系统已经为我们提供了一些Interpolator比如 accelerate_decelerate_interpolator,accelerate_interpolator等,详情可以参考官方文档。

缩放动画

640?wx_fmt=png

参数分别是:

  •       fromXScale:视图在水平方向x 缩放的起始值

  • toXScale:视图在水平方向x 缩放的结束值

  • fromYScale:视图在竖直方向y 缩放的起始值

  • toYScale:视图在竖直方向y 缩放的结束值

  •  pivot :决定了当前动画执行的参考位置。这个属性主要是在动画的view 发生了“物理位置“变化的时候,需要一个参考点。

旋转动画

640?wx_fmt=png

参数分别是:

  •     fromDegrees:视图旋转角度的起始值

  •     toDegrees:视图旋转角度的结束值

  •     pivot和duration同上文

当然动作间也可以相互组合,以达到更复杂的动作,这时需要用到set标签

640?wx_fmt=png

简单的组合效果如下:

除了XML文件形式,java代码也是可以实现的:

640?wx_fmt=png

属性动画

属性动画可以看作是增强版的补间动画,它可以实现补间动画的效果。

相比之下,属性动画有两个优点:

  • 补间动画只能定义两个关键帧在透明、旋转、位移和倾斜这四个属性的

    变换,但是属性动画可以定义任何属性的变化。

  • 补间动画只能对 UI 组件执行动画,但属性动画可以对任何对象执行动画。

    于一般会牵扯到对象具体的属性,更多是通过代码动态获取,所以xml文件

    实现会有些不方便。

先来看看属性动画实现旋转和透明度动画的示例:

640?wx_fmt=png

下面是动画组合:

640?wx_fmt=png

  • 可以看到,动画组合同样是用set来存放

  • 其中playTogether是同时播放,playSequentially是按序播放。

我们可以看到,其通过一个ObjectAnimator的静态工厂方法就能产生任意动画类型,参数都与补间动画类似。

  • 动画持续时间。默认为 300ms,可以通过 android:duration 属性指定。

  • 动画插值方式。通过 android:interploator 指定。

  • 动画重复次数。通过 android:repeatCount 指定。

  • 重复行为。通过 android:repeatMode 指定。

  • 动画集。在属性资源文件中通过来组合。

  • 帧刷新率。指定多长时间播放一帧。默认为 10 ms。

对比之下,属性动画貌似强大了许多,实现很方便,同时动画可变化的值也有了更多的选择,动画所能呈现的细节也更多。但属性动画也有不足,在xml 文件实现的补间动画,复用率更高,在Activity退出时没有及时将动画停止,属性动画会导致Activity无法释放而导致内存泄漏等。可以看出,两者各有优劣,也都是安卓开发中提高用户体验效果常用的动画。

640?wx_fmt=gif

640?wx_fmt=png

640?wx_fmt=jpeg

我们是图灵智能创新团队,同时也是广东海洋大学第一个人工智能创新团队,我们的方向有:计算机视觉、自然语言处理、前端&后台。本公众号主要面向对人工智能感兴趣的读者,如果想了解更多,欢迎关注我们!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值