Animation动画学习
动画分类:
逐帧动画
一、逐帧动画 和 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动画学习相关推荐
- Android动画学习笔记-Android Animation
3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一个新的动画系统:property animation,这三 ...
- web前端学习(十三)animation动画
动画 由于该技术的规范还没有稳定,在使用前要先确保浏览器对其兼容性. Animations是css3的一个模块,使用keyframes定义如何随着时间的移动改变CSS的属性值,可以通过指定它们的持续时 ...
- Vyond制作2D动画学习教程
Vyond为2D动画提供了极其简单的分解视频创建过程. 你会学到什么 课程获取:Vyond制作2D动画学习教程-云桥网 您将学习如何为2d动画制作画外音 您将学习如何使用Vyond轻松创建精彩的动画视 ...
- Blender中的多平面动画学习教程
技能分享–Blender中的多平面动画 Skillshare – Multiplane Animation in Blender 语言:英语+中英文字幕(根据原英文字幕机译更准确) 大小解压后:1.3 ...
- CORE ANIMATION的学习备忘录
CORE ANIMATION的学习备忘录(第一天) 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性 ...
- Android动画学习笔记
Android实战经验之图像处理及特效处理的集锦 https://www.oschina.net/question/231733_44154 Android动画学习笔记 3.0以前,android支持 ...
- Android Animation动画详解(二): 组合动画特效
前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一 ...
- Carson带你学Android:这是一份全面详细的属性动画学习攻略!
前言 属性动画的使用 是 Android 开发中常用的知识 本文将献上一份全面 & 详细的属性动画学习指南,将详细介绍属性动画的所有内容,包括:意义.作用.应用场景.功原理 & 具体使 ...
- 超级强大的SVG SMIL animation动画详解
超级强大的SVG SMIL animation动画详解 本文摘自超级强大的SVG SMIL animation动画详解_Zoomla!逐浪CMS官网 (z01.com),网站看上去有年头了,担心哪天会 ...
最新文章
- ELMo解读(论文 + PyTorch源码)
- 从《黑客帝国》说起,我们如何证明这个世界不是一个系统?
- 进程间通信(3) 剪贴板
- python秒杀神器苏宁_Python爬虫——实战三:爬取苏宁易购的商品价格
- oracle erp 库存相关,oracle erp库存模块表(INV)
- TCP三次握手及四次挥手详细图解(转)
- leetcode-search-in-rotated-sorted-array
- api接口怎么分批传递数据_新手上路:浅谈什么是API接口 API定义是什么
- DXperience Winforms12.2版的中文使用手册
- 使用EasyNVR无插件实时播放海康摄像机视频
- java如何面试别人_Java面试如何考察候选人
- [雨松MOMO程序研究院]Unity3D研究院之构建游戏框架与导出IOS项目(一)
- TARA-威胁建模方案3
- yii2 使用gii生成mongo模型 控制器以及YII2 多MongoDB配置和使用
- 飞腾arm服务器下的银河麒麟V10 yum 安装docker
- Android:高德SDK的基本使用
- MapReduce案例:手机流量的统计
- python判断三角形程序_python三角形判定怎么做
- networkx的安装及简单用法
- Access point name(APN)