android动画入门
android动画有四种:Frame(逐帧)动画,Tween(补间)动画,Layout(布局)动画,Property(属性)动画。Frame动画跟放电影一样,依次播放静态图片。补间动画就是开发只需要指定开始,结束的关键帧,而动画变化的“中间帧”由系统计算并补齐。布局动画是在每次布局发生变化的时候系统调用的一个预加载动画效果,使用layout动画可以让布局的变化过度看起来更自然(不常使用)。属性动画,这个是在Android 3.0中才引进的,它可以直接更改我们对象的属性。本文只介绍前面两种,后面两种以后再写博文单独介绍。
逐帧动画
定义如下(在anim目录下定义一个xml文件):
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"><item android:drawable="@drawable/flower1" android:duration="1000"/><item android:drawable="@drawable/flower2" android:duration="1000" />
</animation-list>
android:oneshot控制动画是否重复播放,如果为true就不重复。
具体用法如下:
1、在xml布局中设置ImageView的背景为动画(anim/xx.xml) 或者用代码:myView.setBackgroundResource(+R.anim.xx);(注意R前面的"+"号,如果没有可能会报错)
2.AnimationDrawable anima = (AnimationDrawable)imageView.getBackground();
3.anima.start(); //stop()是停止
补间动画
android使用Animation抽象类来定义动画,他有下面几个子类:TranslateAnimation AlphaAnimation RotateAnimation ScaleAnimation。 只要为补间动画定义了三个必要的信息,android就会根据开始帧,结束帧,持续时间计算出中间还需要补入多少帧,并计算所有补入帧的图形。为了计算动画期间需要补入多少帧以及具体什么时间补帧,android引入了Interpolator配合补间动画,用来控制动画速度,这样就可以使动画以匀速,变速,抛物线速度等速度进行展示。
Interpolator是一个接口,常见的有如下几个实现类,分别实现不同的动画变换速度。 AccelerateInterpolator :开始较慢,后面加速。 AccelerateDecelerateInterpolator ;开始和结束较慢,中间加速。 CycleInterpolator :变换速度按正玄曲线。 DecelerateInterpolator 开始较快,然后开始减速。 LinearInterpolator :动画匀速变换。 一般都会使用资源文件来定义补间动画,这些定义可以写在资源文件中的android:interpolator属性里面,就像下面这样:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/linear_interpolator"><scale android:fromXScale="1.0"android:toXScale="0.01"android:fromYScale="1.0"android:toYScale="0.01"android:pivotX="50%"android:pivotY="50%"android:fillAfter="true"android:duration="3000" /><alpha android:fromAlpha="1.0"android:toAlpha="0.05"android:duration="3000" /><rotate android:fromDegrees="0"android:toDegrees="1800"android:pivotX="50%"android:pivotY="50%"android:duration="3000" />
</set>
补间动画的大致用法如下:
1、在资源文件中定义补间动画;
2、加载动画 Animation anim = AnimationUtils.loadAnimation(this, R.anim.xxx);
animation.setFillAfter(true);
或者在代码里面写:
TranslateAnimation anim = new TranslateAnimation(curX,nextX,curY,nextY);
anim.setDuration(time);
3、开启动画 imgview.startAnimation(anim);
自定义补间动画
自定义补间动画可以实现3D的效果,需要继承Animation并重写applyTransformation(float interpolatedTime, Transformation t)方法,这个两个参数说明如下:
interpolatedTime:代表了动画的时间进行比,值的范围是0~1.
Transformation:代表不同时刻对动画的变形程度,里面包装了Matrix(用getMatrix()即可得到),因此可以进行旋转,缩放,移动等操作。
为了对图像或视图进行三维空间变换还需要使用到Camera类,作用类似于Matrix,但更加强大,其提供了如下常用的方法:
save():
restore():
getMatrix(Matrix matrix):将Camera所做的变换应用到matrix上
camera.translate(float x, float y, float z):在三维空间进行位移变换
rotateX(float deg):沿着x轴旋转
rotateY(float deg):
rotateZ(float deg):
applyToCanvas(Canvas canvas):将Camera所做的变换应用到canvas上
android三维坐标系统如下图:
实现自定义补间动画的关键调用如下:
1、在继承Animation的类中
public MyAnimation(int x,int y,int d){cX =x;cY = y;duration = d;}@Overridepublic void initialize(int width, int height, int parentWidth, int parentHeight) {super.initialize(width, height, parentWidth, parentHeight);setDuration(duration);setFillAfter(true); //设置动画结束后效果保留setInterpolator(new LinearInterpolator());}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {super.applyTransformation(interpolatedTime, t);camera.save();camera.translate(100 - 100 * interpolatedTime, 150 * interpolatedTime - 150, 80 - 80 * interpolatedTime);camera.rotateX(720 * interpolatedTime);camera.rotateZ(720 * interpolatedTime);Matrix matrix = t.getMatrix();camera.getMatrix(matrix);matrix.preTranslate(-cX, -cY);matrix.postTranslate(cX, cY); camera.restore();}
2、在MainActivity中启动该动画即可
listView.setAnimation(new MyAnimation(screenWidth / 2, screenHeight / 2, 7000));
android动画入门相关推荐
- android动画入门,Android动画之入门篇(一)
作为Android开发者,动画是非常重要的知识点,本文主要从入门角度来探索动画. Android的动画主要包括三大类:逐帧(Frame)动画,补间(Tween)动画,属性动画. 1. 逐帧(Frame ...
- android动画入门,Android动画基础总结
Android动画主要分为两种,视图动画和属性动画,视图动画又分为补间动画和帧动画两种.补间动画包含透明动画(Alpha),缩放动画(Scale),平移动画(Translate),旋转动画(Rotat ...
- android 动画菜鸟,android---动画入门(一)
android 动画分为两类,View Animation(视图动画)和property Animation(属性动画),View Animation(视图动画)包含了Tween Animation和 ...
- android动画的实现原理,Android动画的实现原理 .
1.动画运行模式 独行模式 中断模式 2.Animation类 每个动画都重载了父类的applyTransformation方法这个方法的主要作用是把一些属性组装成一个Transformation类, ...
- Android 渗透测试学习手册 第一章 Android 安全入门
第一章 Android 安全入门 作者:Aditya Gupta 译者:飞龙 协议:CC BY-NC-SA 4.0 Android 是当今最流行的智能手机操作系统之一. 随着人气的增加,它存在很多安全 ...
- Android动画完全解析--属性动画
一.概述 上篇博客介绍了View动画的简单使用和基本工作原理原理,这篇来学习下属性动画.和View动画不同的是,属性动画不再简单的使用平移.旋转.缩放.透明度这4种变换,代替它们的是ValueAnim ...
- Android动画之AnimatorSet联合动画用法
动画入门和进阶文章列表: Animation动画概述和执行原理 Android动画之补间动画TweenAnimation Android动画之逐帧动画FrameAnimation Android动画之 ...
- Android动画之LayoutTransition布局动画
动画入门和进阶文章列表: Animation动画概述和执行原理 Android动画之补间动画TweenAnimation Android动画之逐帧动画FrameAnimation Android动画之 ...
- 最新Android基础入门教程目录(完结版)
第一章:环境搭建与开发相关(已完结 10/10) https://blog.csdn.net/coder_pig/article/details/50000773 Android基础入门教程--1.1 ...
- 来一份Android动画全家桶(下篇)
我们借上篇继续 直切主题: 当然有兴趣的可以加入Android工程师交流QQ群:752016839 主要针对Android开发人员提升自己,突破瓶颈,相信你来学习,会有提升和收获.在这个群里会有你所需 ...
最新文章
- 爬虫 python 爬取php的网页,带有post参数的网页如何爬取
- 【转】HashMap集合中key只能为引用数据类型,不能为基本类型
- php另类上传图片的方法(PHP用Socket上传图片)
- 【BO】WEBI文件打开时提示Illegal access错误
- MapReduce的基本流程
- SVO: Fast Semi-Direct Monocular Visual Odometry
- WinAPI: SetTextJustification - 设置两端对齐
- 三星s8清除html查看器,三星Galaxy S8/S8+双清教程_怎么清理数据缓存和恢复出厂设置...
- 【完结】囚生CYの备忘录(20220525-20220813)
- mysql多表查询分页面_mysql多表联合查询分点经验给大家
- 【C语言】动态内存开辟的使用『malloc』
- Linux运维常见面试题汇总
- UA MATH563 概率论的数学基础1 概率空间4 实数域上的概率测度
- 来我家玩吧服务器维护中,为什么来我家玩吧登录不了,来我家玩吧进不去怎么回事...
- android怎么做表格显示数据
- 图标照旧的效果_这不是而且不能成为“一切照旧”
- 什么是用户感?看看这4个产品经理的感性设计
- java中处理换行符
- spSellProduct 中,Begin Transaction 和 Commit Transaction 语句被包装在 Begin Try 和 End Try 块之间
- 中南大学python试卷_中南大学考研常见问题汇总