Android Day11 - 动画
Android中常见的动画有:帧动画、补间动画、属性动画
个个击破:
1.帧动画(Drawable Animation)
通过加载一些图片资源,将它们按顺序展示出来,就像放电影一样。通过AnimationDrawable这个
类
来实现。实现步骤:
1)创建res/drawable/目录,即在res文件夹下创建drawable文件夹。
将准备加载的图片资源放到drawable文件夹下,并在drawable目录下新建一个XML文件,用来链
接资源并定义动画的属性,格式如
下:
1 2 3 4 5 6 7 | <? xml version = "1.0" encoding = "utf-8" ?> < animation-list xmlns:android = "http://schemas.android.com/apk/res/android" android:oneshot = "true" > < item android:drawable = "@drawable/girl_1" android:duration = "200" /> ... </ animation-list > |
oneshot属性表示是否循环播放动画
duration属性表示每张图片显示的时长,单位毫秒。
2)将XML与ImageView结合并得到动画对象
这是初始化动作,一般放在Activity的onCreate方法中。
1 2 | iv_play.setBackgroundResource(R.drawable.my_anim2); final AnimationDrawable animation = (AnimationDrawable) iv_play.getBackground(); |
3) 开始动画
1 2 3 4 5 6 | new Thread(){ public void run() { SystemClock.sleep( 1000 ); animation.start(); }; }.start(); |
官方文档着重强调了start()方法不能写在Activity的onCreate方法中,你可以在Activity的
onWindowFocusChanged方法中调用start方法。
其实呢,官方文档的这种说法不是特别准确。准确地来说,不是start方法不能在Activity的
onCreate方法中执行,而是start方法不能执行太快,因为动画可能还没有附加到Activity上。
如果非要在在Activity的onCreate方法中执行,只有单独给start()方法创建一个子线程,让线程
sleep一小会儿,就达到了延迟执行start方法的目的。
这个就和MediaPlayer的start方法很相似,原理基本是一样的。
2.补间动画(View Animation)
补间动画就是在View对象上完成一些位置、大小、旋转、透明的变化,从而形成动画的效果。虽然
View出现了动画,但是并没有改变控件的真正坐标。
通过查阅官方文档,发现View有一个方法startAnimation,说明任何的View的对象都可以实现补间
动画的效果。
和Day10多媒体学的Matrix矩阵定义图片几种效果相似,补间动画有有5种:
上面这5个动画类,都是Animation的子类。根据动画的对象的获取方式不同,补间动画分为2类。
2-1:动画的获取
第1种方式)通过构造函数来构造动画对象
XxxAnimation xxx = new XxxAnimation(指定动画的参数,不同的动画不一样。);
xxx.setYyy(设置持续时长、重复次数、重复模式等属性);
动画合集对象的获取
AnimationSet set = new AnimationSet(true);
set.add(XxxAnimation); //可以添加任意多个动画,也可以再是合集。
■绽放动画 + 透明动画合集
缩放:就是宽高的变化
new ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue);
fromX:表示缩放开始的宽1.0f表示控件原始宽,0.5f表示控件原始宽的一半。
toX:表示缩放结束的宽1.0f表示控件原始宽,0.5f表示控件原始宽的一半。
fromY:表示缩放开始的高1.0f表示控件原始宽,0.5f表示控件原始高的一半。
toY:表示缩放结束的高1.0f表示控件原始高,0.5f表示控件原始高的一半。
pivotXType,pivotYType:缩放基点X和Y的坐标参考系
RALATIVE_TO_SELF,表示以自身为参考
RALATIVE_TO_PARENT,表示以父控件为参考
ABSOLUTE,以绝对坐标系为参考,即屏幕
pivotXValue,pivotYValue:绽放基点X坐标和Y坐标
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 得到气泡的视图 View view_popWindow = View.inflate(getBaseContext(), R.layout.view_g3_appmanager_popwindow, null ); // 为气泡设置动画合集 透明 + 缩放 AlphaAnimation alphaAnimation = new AlphaAnimation( 0 .3f, 1 .0f); alphaAnimation.setDuration( 200 ); ScaleAnimation scaleAnimation = new ScaleAnimation( 0 .5f, 1 .0f, 0 .5f, 1 .0f, Animation.RELATIVE_TO_SELF, 0 , Animation.RELATIVE_TO_SELF, 0 .5f); scaleAnimation.setDuration( 200 ); AnimationSet animationSet = new AnimationSet( true ); animationSet.addAnimation(alphaAnimation); animationSet.addAnimation(scaleAnimation); view_popWindow.startAnimation(animationSet); |
第2种方式)通过AnimationUtils这个工具类来获取动画对象
首先,应创建res/anim/这个目录,即在res文件夹下新建一个anim文件夹。
新建动画的XML文件,用上面列出的标签,定义动画的参数和属性。
其次,在java代码获取XML动画资源
。
Animation aa = AnimationUtils.loadAnimation(上下文对象, R.anim.XML文件名);
官方文档有这样一句十分重要的话:As with defining a layout, an XML file is
recommended because it's more readable,
reusable
, and
swappable
than
hard-coding
the animation。它的意思推荐开发者使用这种方式定义补间动画,因为它
的阅读性、利用性、交换性(没有明白)比较强。
android Animation动画的xml使用 http://www.2cto.com/kf/201411/352237.html
2-2:动画的启动
与帧动画的启动方式不一样,帧动画是直接通过动画对象来启动的,而补间动画的启动是通过
View对象的startAnimation方法启动的。
1 | iv_show.startAnimation(aa); |
3.属性动画(Property Animation)
API11以上版本才可以使用,可以使用nineoldandroids-2.4.0.jar包
ViewHolder.setXxx(View,)
来设置View的属性动画来兼容低版本手机。
官方文档花了很大的篇幅来说属性动画,说它的功能十分的强大,还将其与补间动画作了一下
比较。其实顾名思义,我们就能明白属性动画的特点。与补间不同,补间动画只是纯粹地让View对
象产生动画的效果,本身View对象没有发生任何的改变。而属性动画不仅可以让View对象,也可以让
not-view对象产生动画效果,而且最重要的一点,属性动画会修改对象的属性。
View.setXxx()
属性动画常和类型估值器TypeEvaluator(和值动画一样都位于android.animation包下)一起使用
ArgbEvaluator 颜色过度器
。。。
4.属性动画
Android属性动画深入分析:让你成为动画牛人 http://www.2cto.com/kf/201401/270169.html
Android 动画详解之属性动画(Property Animation) http://www.2cto.com/kf/201411/353170.html
4-1.值动画(ValueAnimator ) API11之后方可使用
//利用静态方法创建值动画对象
ValueAnimator animator = ValueAnimator.ofFloat(0.0f,1.0f);
animator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float percent = (Float) animation.getAnimatedValue();
//根据这个百分比,做自己想做的事情。
}
});
//持续时长
animator.setDuration(500);
//插值器
//Overshoot 橡皮筋效果,过了又弹回来
//CycleInterpolator 循环加速器,让动画连续执行多次
animator.setInterpolator(new OvershootInterpolator(2));
animator.start();
本文转自屠夫章哥 51CTO博客,原文链接:http://blog.51cto.com/4259297/1679852,如需转载请自行联系原作者

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Flutter环境搭建
这几年,移动跨平台的趋势可以说是越来越明显,技术实现上也是百花争艳,不过究其实现,无外乎有那么几种。 Web 流:也被称为 Hybrid 技术,它基于 Web 相关技术来实现界面及功能。 代码转换流:将某个语言转成 Objective-C、Java 或 C#,然后使用不同平台下的官方工具来开发。 编译流:将某个语言编译为二进制文件,生成动态库或打包成 apk/ipa/xap 文件。 虚拟机流:通过将某个语言的虚拟机移植到不同平台上来运行。 这方面具体的介绍可以查看我之前文章的介绍:移动跨平台开发方案总结。相比较于目前比较好的跨平台开发,有几个比较好的框架:React Native,Flutter和Weex。对于React Native 想必大家应该不陌生,ReactNative 简称是RN ,是 Facebook于15年开源的一个跨平台的框架,目前已经趋于稳定。Flutter则是由Google基于Dart语言开发的一个移动跨平台开发框架,实际上就是以前的Sky SDK,是React Native的竞争对手。Weex 则是阿里开发的一套简单易用的跨平台开发方案,使用较少,没有前面两个名气...
- 下一篇
Android Gson使用详解
Json 是一种文本形式的数据交换格式,比 xml 更为轻量。Json 的解析和生成的方式很多,在 Android 平台上最常用的类库有 Gson 和 FastJson 两种,这里要介绍的是 Gson Gson 的 GitHub 主页点击这里:Gson 一、Gson的基本用法 1.1、Gson对象 在进行序列化与反序列操作前,需要先实例化一个 com .google.gson.Gson 对象,获取 Gson 对象的方法有两种 //通过构造函数来获取 Gson gson = new Gson(); //通过 GsonBuilder 来获取,可以进行多项特殊配置 Gson gson = new GsonBuilder().create(); 1.2、生成 Json 利用 Gson 可以很方便地生成 Json 字符串,通过使用 addProperty 的四个重载方法 public static void main(String[] args) { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("String"...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Red5直播服务器,属于Java语言的直播服务器