动画分类:

逐帧动画

一、逐帧动画 和 AnimationDrawable

1、xml方式定义逐帧动画

逐帧动画通常采用xml资源文件进行定义。

<animation-list android:oneshot=["true"|"false"]><item android:drawable="@drawable/xxx1" android:duration="integer"><item android:drawable="@drawable/xxx2" android:duration="integer">...
</animation-list>

oneshot属性控制动画是否只播放一次,true表示,false表示循环播放。每个item子元素即为一帧。假设逐帧动画资源文件为xxx.xml,则可以通过R.drawable.xxx来引用逐帧动画资源。

2、java代码方式创建逐帧动画AnimationDrawable

1、创建AnimationDrawable对象;

2、调用addFrame(Drawable frame, int duration)添加帧;

3、使用逐帧动画AnimationDrawable

习惯把AnimationDrawable设成ImageView的背景

a、在xml中通过background属性指定:

 <ImageViewandroid:id="@+id/image"android:layout_width="300dp"android:layout_height="300dp"android:background="@drawable/framelist"/>

b、代码中setBackgroundResource()指定

//指定image的background资源
image.setBackgroundResource(R.drawable.framelist)
val background = image.backgroundplay.setOnClickListener {//开始播放帧动画前,先暂停。否则只有第一次点击生效(background as AnimationDrawable).stop()(background as AnimationDrawable).start()
}stop.setOnClickListener {(background as AnimationDrawable).stop()
}

注意

1、AnimationDrawable代表的动画默认是不播放的,必须在程序中启动动画播放才可以。AnimationDrawable提供了start()stop()方法来开始和停止播放动画。

2、启动Frame动画的代码animationDrawable.start();不能应用在OnCreate()方法中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定。在OnCreate()中启动动画,只能看到第一张图片。这里在触摸事件中实现的。

3、调用start前,最好先执行一下stop。

简单介绍下AnimationDrawabe类

        AnimationDrawabe类的继承关系如下所示,可以看出AnimationDrawabe本质上是一个Drawable,由于其实现了Animatable,所以它具有播放、暂停和获取播放状态的功能。

二、补间动画 Tween

补间动画就是指开发者只需要指定动画开始、动画结束“关键帧”,而动画变化的“中间帧”由系统计算并补齐。是逐帧动画的演化形式。

Animation

Android使用Animation代表抽象的动画类,包括的子类有

 AlphaAnimation: 透明度改动的动画。创建该动画时要指定动画开始时的透明度、结束时的透明度和动画持续时间。其中透明度可从0变化到1;

ScaleAnimation: 大小缩放的动画。创建该动画时要指定动画开始时的缩放比(以x、y轴的缩放参数来表示)、结束时动画的缩放比,并指定动画持续时间。由于缩放时以不同点为中心缩放效果并不相同,因此指定缩放动画时还需要通过pivotX,pivotY来指定缩放中心的坐标;

TranslateAnimation: 位移变化的动画,创建动画时只要指定动画开始时的位置(以X,Y坐标来表示)、结束时的位置,并指定动画持续时间即可;

RotateAnimation: 旋转动画。创建该动画时需要指定动画开始时的旋转角度、结束时的旋转角度,并指定动画持续时间。由于旋转时以不同点为中心旋转效果不一样,因此指定旋转动画还要通过pivotX,pivotY来指定旋转轴心的坐标。

补充:

pivotX和pivotY

关于动画属性pivotX和pivotY的值可以设置成三种形式:整数值、百分数(或小数)和百分数p 三种形式,比如50、50%(或0.5)和50%。需要明确的是,这里以进行动画控件左上角为原点坐标。当属性值为数值,如 50 时,表示原点坐标加上 50px,作为起始点;如果是百分数,比如 50%,表示原点坐标加上自己宽度的 50%(即控件水平中心)作为起始点 ;如果是 50%p(字母 p 是 parent 的意思),取值的基数是父控件,因此 50%p 就是表示在原点坐标加上父控件宽度的 50% 作为起始点 x 轴坐标。总之就是三者都是在原点坐标的基础上变化。具体可以参考文章”图解 Android View动画中 android:pivotX 和 android:pivotY 属性的含义_hust_twj的博客-CSDN博客_android:pivotx“

fromXDelta和toXDelta

        TranslateAnimation动画的fromXDelta和toXDelta取值也是以动画控件左上角为原点坐标。

Interpolator

为了控制在动画期间需要动态补入多少帧,具体在动画运行运行的哪些时刻补入帧,需要借助于InterPolator。

Interpolator根据特定算法计算出整个动画所需动态插入帧的密度和位置,简单来说,InterPolator负责控制动画的变化速度,这就使得基本的动画效果能以匀速变化、加速、减速、抛物线速度等各种速度变化。

 LinearInterpolator:动画以匀速的变化速度;

AccelerateInterpolator:匀加速变化;

AccelerateDecelerateInterpolator:先匀加速,后匀减速变化;

CycleInterpolator:动画循环播放特定的次数,变化速度按正弦曲线改变;

DecelerateInterpolator:匀减速变化;

xml定义补间动画资源

<set xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/linear_interpolator"android:fillAfter="true"><scale android:fromXScale="1.0"android:toXScale="0.01"android:fromYScale="1.0"android:toYScale="0.01"android:pivotX="10%"android:pivotY="10%"android:duration="13000"/><alpha android:fromAlpha="1"android:toAlpha="0.05"android:duration="3000"android:fillAfter="true"/><rotate android:fromDegrees="0"android:toDegrees="1800"android:pivotY="50%"android:pivotX="50%"android:duration="13000"android:fillAfter="true"/><translate android:fromXDelta="0"android:toXDelta="100"android:fromYDelta="0"android:toYDelta="100"/>
</set>

fillBefore和fillAfter属性

fillBefore是指动画结束时画面停留在第一帧,fillAfter是指动画结束是画面停留在最后一帧。

1、在代码中设置

animation.setFillAfter(true);

2、在animation的xml文件中设置,但是必须设置成set标签的属性才会生效!!!

<set xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/linear_interpolator"android:fillAfter="true"><scale android:fromXScale="1.0"android:toXScale="0.01"android:fromYScale="1.0"android:toYScale="0.01"android:pivotX="50%"android:pivotY="50%"android:duration="3000"/>...
/>

        优先级:当xml文件和java代码中都对fillAfter属性进行了设置,则java代码中的优先级更高。

使用补间动画

1、加载/创建补间动画资源:

//加载补间动画
val tweenAnimation = AnimationUtils.loadAnimation(this, R.anim.tweenanim)
tweenAnimation.fillAfter = false//代码中创建补间动画对象
var translate = TranslateAnimation(0F, transX,0F, transY)
translate.duration = 1000
translate.fillAfter = true

2、利用imageview启动补间动画

image.startAnimation(translate)

Animation动画学习相关推荐

  1. Android动画学习笔记-Android Animation

    3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一个新的动画系统:property animation,这三 ...

  2. web前端学习(十三)animation动画

    动画 由于该技术的规范还没有稳定,在使用前要先确保浏览器对其兼容性. Animations是css3的一个模块,使用keyframes定义如何随着时间的移动改变CSS的属性值,可以通过指定它们的持续时 ...

  3. Vyond制作2D动画学习教程

    Vyond为2D动画提供了极其简单的分解视频创建过程. 你会学到什么 课程获取:Vyond制作2D动画学习教程-云桥网 您将学习如何为2d动画制作画外音 您将学习如何使用Vyond轻松创建精彩的动画视 ...

  4. Blender中的多平面动画学习教程

    技能分享–Blender中的多平面动画 Skillshare – Multiplane Animation in Blender 语言:英语+中英文字幕(根据原英文字幕机译更准确) 大小解压后:1.3 ...

  5. CORE ANIMATION的学习备忘录

    CORE ANIMATION的学习备忘录(第一天) 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性 ...

  6. Android动画学习笔记

    Android实战经验之图像处理及特效处理的集锦 https://www.oschina.net/question/231733_44154 Android动画学习笔记 3.0以前,android支持 ...

  7. Android Animation动画详解(二): 组合动画特效

    前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一 ...

  8. Carson带你学Android:这是一份全面详细的属性动画学习攻略!

    前言 属性动画的使用 是 Android 开发中常用的知识 本文将献上一份全面 & 详细的属性动画学习指南,将详细介绍属性动画的所有内容,包括:意义.作用.应用场景.功原理 & 具体使 ...

  9. 超级强大的SVG SMIL animation动画详解

    超级强大的SVG SMIL animation动画详解 本文摘自超级强大的SVG SMIL animation动画详解_Zoomla!逐浪CMS官网 (z01.com),网站看上去有年头了,担心哪天会 ...

最新文章

  1. ELMo解读(论文 + PyTorch源码)
  2. 从《黑客帝国》说起,我们如何证明这个世界不是一个系统?
  3. 进程间通信(3) 剪贴板
  4. python秒杀神器苏宁_Python爬虫——实战三:爬取苏宁易购的商品价格
  5. oracle erp 库存相关,oracle erp库存模块表(INV)
  6. TCP三次握手及四次挥手详细图解(转)
  7. leetcode-search-in-rotated-sorted-array
  8. api接口怎么分批传递数据_新手上路:浅谈什么是API接口 API定义是什么
  9. DXperience Winforms12.2版的中文使用手册
  10. 使用EasyNVR无插件实时播放海康摄像机视频
  11. java如何面试别人_Java面试如何考察候选人
  12. [雨松MOMO程序研究院]Unity3D研究院之构建游戏框架与导出IOS项目(一)
  13. TARA-威胁建模方案3
  14. yii2 使用gii生成mongo模型 控制器以及YII2 多MongoDB配置和使用
  15. 飞腾arm服务器下的银河麒麟V10 yum 安装docker
  16. Android:高德SDK的基本使用
  17. MapReduce案例:手机流量的统计
  18. python判断三角形程序_python三角形判定怎么做
  19. networkx的安装及简单用法
  20. Access point name(APN)

热门文章

  1. 基于JAVA教学质量测评系统计算机毕业设计源码+系统+lw文档+部署
  2. 关于word的样式类型
  3. 浏览器快速打开一个可编辑的文本输入域
  4. 微信屏蔽网址解决办法 怎么样才能让被微信屏蔽的网址正常访问
  5. Wordpress网站地图插件
  6. GJCTF 官方WP PWN部分
  7. Nvidia显卡驱动下载
  8. 虚拟机或公有云搭建wordpress博客
  9. 测试人员,如何对直播类产品的直播质量进行测试呢?
  10. 在福州,看见智慧城市的务实完整方案