安卓开发_浅谈Android动画(四)
Property动画
概念:属性动画,即通过改变对象属性的动画。
特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置
一、重要的动画类及属性值:
1、 ValueAnimator 基本属性动画类
|
方法 |
描述 |
|
setDuration(long duration) |
设置动画持续时间的方法 |
|
setEvaluator(TypeEvaluator value) |
设置插值计算的类型 |
|
setInterpolator(TimeInterpolator value) |
设置时间插值器的类型 |
|
addUpdateListener(ValueAnimator.AnimatorUpdateListener listener) |
更新动画对象的监听事件 |
|
setRepeatCount(int value) |
设置动画重复执行的次数 |
|
setRepeatMode(int value) |
设置动画重复方式 |
|
addListener(Animator.AnimatorListener l) |
设置监听事件 有 1、 动画开始时的监听 2、 动画结束时的监听 3、 动画重新开始时的监听 |
|
start() |
开始执行动画 |
|
cancel() |
停止当前执行的动画,属性值会停止在当前执行位置 |
|
end() |
结束动画,属性值会停止在结束位置,即使没有播放完动画 |
2、 ObjectAnimator 对象属性动画类,继承自ValueAnimator
|
方法 |
描述 |
|
第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的float类型的变化值 |
|
第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的int类型的变化值 |
|
第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的object类型的变化值 |
|
setTarget(Object target) |
设置执行动画的对象 |
3、 TimeInterpolator 时间插值器
设置动画执行的动作效果
Eg:animator.setInterpolator(new BounceInterpolator() //设置动画效果为跳跃
|
类型 |
描述 |
|
AccelerateInterpolator |
加速,开始时慢中间加速 |
|
DecelerateInterpolator |
减速,开始时快然后减速 |
|
AccelerateDecelerateInterolator |
先加速后减速,开始结束时慢,中间加速 |
|
AnticipateInterpolator |
反向 ,先向相反方向改变一段再加速播放 |
|
AnticipateOvershootInterpolator |
反向加超越,先向相反方向改变,再加速播放,会超出目的值然后缓慢移动至目的值 |
|
BounceInterpolator |
跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100 |
|
CycleIinterpolator |
循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2 * mCycles * Math.PI * input) |
|
LinearInterpolator |
线性,线性均匀改变 |
|
OvershottInterpolator |
超越,最后超出目的值然后缓慢改变到目的值 |
4、 PropertyValuesHolder
作用:对一个View执行多个属性动画,该类对多属性动画进行了优化,会合并一些invalidate()来减少刷新视图,该类在3.1中引入
5、TypeEvaluator 插值计算的类型
(1)、IntEvaluator:属性的值类型为int
(2)、FloatEvaluator:属性的值类型为float
(3)、ArgbEvaluator:属性的值类型为十六进制颜色值
6、常用动画属性
(1)translationX,translationY:移动坐标
(2)rotation,rotationX,rotationY:旋转,rotation用于2D旋转角度,3D中用到后两个
(3)scaleX,scaleY:缩放
(4)alpha:透明度
(5)backgroundColor: 背景
二、动画Demo
1、位移动画
ValueAnimator animator = ObjectAnimator.ofFloat(image, "translationY", );//第一个参数为执行动画的对象 ImageView第二个参数为动画属性:y轴位移 ,第三个参数为value
//动画执行的事件
animator.setDuration();
animator.setRepeatCount(ValueAnimator.INFINITE); //设置循环次数:无限
animator.setRepeatMode(ValueAnimator.REVERSE); //设置循环方式:倒叙循环 // 设置加速效果
// animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setInterpolator(new BounceInterpolator()); //设置弹跳效果
animator.start();
效果:

2、绕X轴旋转动画
ValueAnimator animator = ObjectAnimator.ofFloat(image, "rotationX", ,);
//第一个参数为执行动画的对象ImageView 第二个参数为动画属性,第三个参数为初始角度,第四个动画为结束角度
animator.setDuration();
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.start();
效果图:

3、图片绕xy轴转动,两个属性动作的情况
1 PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("rotationY",0f,45f,90f,160f,260f,360f );
PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("rotationX",0f,360f );
ValueAnimator animator = ObjectAnimator.ofPropertyValuesHolder(image,pvh1,pvh2);//将多个需要并发执行的动画合并执行
animator.setDuration();
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.start();
效果图:

4、多个属性动画一起执行的情况
AnimatorSet aSet = new AnimatorSet();
ValueAnimator a1 = ObjectAnimator.ofFloat(image,"translationX",0f,200f);
a1.setDuration(); ValueAnimator a2 = ObjectAnimator.ofFloat(1f,1.5f,1.0f);
a2.addUpdateListener(new AnimatorUpdateListener() { @Override
public void onAnimationUpdate(ValueAnimator animation) {
// TODO Auto-generated method stub
//更新对象的属性的方法
float value = (Float) animation.getAnimatedValue();
image.setScaleX(value);
image.setScaleY(value); }
});
a2.setDuration(); //旋转
ValueAnimator a3 = ObjectAnimator.ofFloat(image,"rotation",0f,);
a3.setDuration(); //渐变
ValueAnimator a4 = ObjectAnimator.ofFloat(image,"alpha",1f,0f);
a4.setDuration(); aSet.play(a1).with(a3);
aSet.play(a2).after(a3);
aSet.play(a2).with(a4); aSet.start();
效果图:

5、布局背景动画
//改变主布局的背景实现动画效果
animator = ObjectAnimator.ofInt(linearLayout,"backgroundColor",Color.WHITE,Color.BLUE,Color.GREEN,Color.RED);
//设置颜色值得差值类型
animator.setEvaluator(new ArgbEvaluator());
animator.setDuration();
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.start();
效果图:

--------------------------------------------------------------------------------------------------------------------------------
相关知识:
安卓开发_浅谈Android动画(四)的更多相关文章
- 安卓开发_浅谈Android动画(二)
在学习了四个基本动画之后,现在要学习一些更有用的效果 先给出所有的动画xml <?xml version="1.0" encoding="utf-8"?& ...
- 安卓开发_浅谈Android动画(一)
动画效果,针对图片实现 现在学习四种基本的简单动画效果 一.Tween Animation共同属性 1.Duration:动画持续时间(毫秒单位) 2.fillAfter:设置为true,动画转化在动 ...
- 安卓开发_浅谈Android动画(三)
一.LayoutAnimation布局动画 用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果 在res-anim文件下新建一个动画xml文件 <?xml ve ...
- 安卓开发_浅谈ListView(SimpleAdapter数组适配器)
安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...
- 安卓开发_浅谈ListView(自定义适配器)
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...
- 安卓开发_浅谈Fragment之ListFragment
ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...
- 安卓开发_浅谈OptionsMenus(选项菜单)
Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...
- 安卓开发_浅谈Notification(通知栏)
Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到 ...
- 安卓开发_浅谈AsyncTask
现在就来学习一下AsyncTask. 一.先介绍一下AsyncTask: 在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给 ...
随机推荐
- Caching查看窗口
闲来无事,做了一个简约的Caching查看窗口,可以方便的查看本地缓存的使用情况: 下面的URL和VersionNum用来查看某个特定资源的特定版本是否存在,分别输入所需信息,点击“检测”,即可在下面 ...
- 编写高质量JS代码的68个有效方法(十二)
No.56.避免不必要的状态 Tips: 尽可能地使用无状态的API 如果API是有状态的,标示出每个操作与哪些状态有关联 无状态的API简洁,更容易学习和使用,也不需要考虑其他的状态.如: 'tes ...
- nodejs中常用加密算法
在常用的nodejs+express工程中,为了安全在登录及表单传输时,应该都需进行加密传输,目前个人常用到的加密方式有下列几种: 1.Hash算法加密: 创建一个nodejs文件hash.js,输入 ...
- client/scroll/offset width/height/top/left ---记第一篇博客
client/scroll/offset width/height/top/left (盒模型为contentBox,定位原点是元素左上角边框最外层的交点) clientWidth width+左p ...
- [Math] Deferred Acceptance Algorithm
约会配对问题 一.立即接受算法: 对于约会的配对,大家都去追自己最心仪的女生.而这个女生面对几位追求者,要立刻做个决定. 被拒绝的男生们调整一下心情,再去追求心中的 No. 2.以此类推. 这样做法有 ...
- Qt之自定义QLineEdit右键菜单
一.QLineEdit说明 QLineEdit是单行文本框,不同于QTextEdit,他只能显示一行文本,通常可以用作用户名.密码和搜索框等.它还提供了一些列的信号和槽,方便我们使用,有兴趣的小伙伴可 ...
- 二元查找树转变成排序的双向链表之C#算法实现
此题为July在CSDN发布的微软编程面试100题中的第一题,觉得蛮有趣的,今天也拿过来玩玩,July的代码用的是C++实现,可能因为有指针的原因吧,感觉看起来相对比较容易理解整个的实现过程,而我,试 ...
- C#反射的应用
项目框架中有一个很实用的方法,它用来获取客户端post的数据,并自动赋值到对象各属性,这样后台少写了很多代码.但是对于有主表.子表的表单,框架中没有提供自动给子表对象各属性赋值的方法,每次都要写很多代 ...
- Python入门笔记(17):错误、异常
一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序 ...
- PHP图像处理类库及演示分享
简单写了一个PHP的图像处理类库,虽然功能比较少,但是目前也没用到太高级的,以后用到了再填吧,或者哪位给点建议加上什么功能,或者有什么需求可以跟我说,我有时间加上,如果哪位对这个类库进行了扩展的话,还 ...