浅谈Android动画(二)
上一篇的动画介绍谈了动画的一些基本使用方法,这一篇谈谈动画的进一步使用。
ObjectAnimator
- 对属性使用该动画时,要提供setter/getter方法
- ObjectAnimator.ofXXX()创建动画对象
- 调用start()方法开始动画
- 可以为动画设置时间等
public class TestView extends View {......public void setProgress(float progress) {this.progress = progress;invalidate();}public float getProgress() {return progress;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);RectF rectF=new RectF(10,10,10+progress,10+getHeight());canvas.drawRect(rectF,mPaint);}public void startAnim(){ObjectAnimator animator=ObjectAnimator.ofInt(this,"progress",0,120);animator.setDuration(2000);animator.start();}......
}
为ObjectAnimator同时设置多个动画属性:
PropertyValuesHolder holder1=PropertyValuesHolder.ofFloat("scaleX",1);PropertyValuesHolder holder2=PropertyValuesHolder.ofFloat("translateX",100);PropertyValuesHolder holder3=PropertyValuesHolder.ofFloat("alpha",1);ObjectAnimator animator1=ObjectAnimator.ofPropertyValuesHolder(view,holder1,holder2,holder3);animator1.start();
ViewPropertyAnimator
ViewPropertyAnimator对象可以通过View.aniamte()获取。
可以看看它的源码:
public ViewPropertyAnimator animate() {if (mAnimator == null) {mAnimator = new ViewPropertyAnimator(this);}return mAnimator;}
ViewPropertyAnimator可以使用链式设置属性:
view.animate().alpha(1.0f).scaleY(0.5f).translationX(0.5f).setDuration(2000).start();
AnimatorSet
这是动画集合,在上篇有提到,这此时使用它来控制多个动画属性的顺序:
AnimatorSet animatorSet=new AnimatorSet();//动画一次执行 animatorSet.playSequentially(animator1,animator2);animatorSet.start();
AnimatorSet animatorSet=new AnimatorSet();animatorSet.play(animator1).before(animator2);//Animator1先执行animatorSet.playTogether(animator1,animator3);//animator1跟animator3同时执行animatorSet.start();
Keyframe
场景:一个进度条先滑动到100%,然后再滑回到实际的进度。这是使用Keyframe是罪合适并且比较简单。
//开始的时候进度为0Keyframe k1=Keyframe.ofFloat(0,0);
//50%的时候进度为300Keyframe k2=Keyframe.ofFloat(0.5f,300);
//100%的时候进度为100Keyframe k3=Keyframe.ofFloat(1,100);PropertyValuesHolder holder=PropertyValuesHolder.ofKeyframe("progress",k1,k2,k3);ObjectAnimator animator1=ObjectAnimator.ofPropertyValuesHolder(this,holder);animator1.setDuration(3000);animator1.start();
插值器
作用:根据时间的流逝的百分比来计算出当前属性值改变的百分比
- LinearInterpolator:线性插值器,匀速动画
- AccelerateDecelerateInterpolator:加速减速插值器,动画两头慢,中间块
- DecelerateInterpolator:减速插值器,动画越来越慢
- OvershootInterpolator:回弹,
动画会超过目标值一些,然后再弹回来。效果看起来有点像你一屁股坐在沙发上后又被弹起来一点的感觉
…….(文档)
动画监听器
AnimatorListener的定义:
public static interface AnimatorListener {void onAnimationStart(Animator animation);void onAnimationEnd(Animator animation);void onAnimationCancel(Animator animation);void onAnimationRepeat(Animator animation);}
根据它的名字大概可以知道是在什么时候回调:
- onAnimationStart:动画开始后
- onAnimationEnd:动画结束后
- onAnimationCancel:动画取消后
- onAnimationRepeat:动画重复
注意:调用cancel后,会执行onAnimationEnd方法,在onAnimationCancel方法后执行。
AnimatorUpdateListener的定义:
public static interface AnimatorUpdateListener {void onAnimationUpdate(ValueAnimator animation);}
监听整个动画的过程,动画的每播放一帧都会回调该方法。
O文明K,本次动画使用介绍到此结束,希望大家可以指出哪些不对。
浅谈Android动画(二)相关推荐
- 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台
一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...
- 浅谈Android游戏开发基础和经验
Android游戏开发基础和经验是本文要介绍的内容,主要是来了解并学习Android游戏开发的内容实例,具体关于Android游戏开发内容的详解来看本文. 做一个类似俄罗斯方块的android游戏开发 ...
- android fps 垂直同步,浅谈Android流畅度
原标题:浅谈Android流畅度 哈哈 讲个故事 白 1 流畅度 关于流畅度谷歌官方给出的解释为:running at a consistent 60 frames per second, witho ...
- 浅谈Android中的MVP与动态代理的结合
浅谈Android中的MVP与动态代理的结合 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在Android开发平台上接触MVP足足算起来大概已经有一个年头左右.从最开始到现在经 ...
- catia三维轴承_浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文
浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文 一.概述 单排四点接触球转盘轴承是一种能够同时承受较大轴向负荷.径向负荷和倾覆力矩等综合载荷,集支承.旋转.传动.固定等多种功能于一身的特殊 ...
- 浅谈Android引用计数(2)
在浅谈Android引用计数(1)中讲了LightRefBase实现对象计数管理的原理,这篇文章将要分析重量级的引用基类:RefBase的实现和它的作用. 下面是RefBase和相关类的类图: 图中可 ...
- 浅谈Android保护技术__代码混淆
浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...
- 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路
原文地址: http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间 ...
- android分屏模式_浅谈 Android 7.0 多窗口分屏模式的实现
从 Android 7.0 开始,Google 推出了一个名为"多窗口模式"的新功能,也就是我们常说的"分屏模式".那么,这个功能有什么用呢?作为开发者,我们又 ...
最新文章
- 浅谈民用无人机的行业化应用场景
- 神仙尬聊!哲学马云VS科技马斯克:生活就该每周工作12小时,开特斯拉玩遍三千城市...
- 编写jmeter测试用例_Jmeter性能测试系列篇(十)--批量用例执行结果检查设置
- 深入研究.NET 5的开放式遥测
- linux限制单个用户使用,linux下限制用户使用系统资源
- redhat bash: yum: 未找到命令..._常用linux yum 命令和 vim命令,这几个要熟记
- One-Error多标签分类_深度学习:如何在多标签分类问题中考虑标签间的相关性?
- 项目实战之服务端分页的实现——SQL
- 在Htdocs之外创建XAMPP / Apache服务文件[关闭]
- 通过思科构造局域网_从Cisco DNA中心的管理的和设置的非结构Catalyst 9800无线局域网控制器...
- 仿斗鱼、美团、网易邮箱等 弹窗效果
- 树莓派ubuntu默认用户名密码及密码修改
- MTK 手机支持3D
- FAT文件系统详解(一)
- matlab rand函数解释,matlab rand()函数五种用法
- 安卓辅助功能获取控件id
- 频繁出现域名无法解析该如何处理
- 28.html设置字体
- JAVA 根据商品属性生成(SKU)规格算法
- Android 图形架构 之三—— 创建Layer、Surface、SurfaceControl
热门文章
- BUUCTF:[MRCTF2020]天干地支+甲子
- #2021.5.20日亲测有效office 2019家庭与学生版安装OneNote 2016软件
- ArcMap中3D符号化显示
- 广发华福收市短评(0605)
- localStorage中怎么存对象?
- 爱米云网盘连接服务器失败,爱米云网盘服务端
- Android 点击拍照,长按录像保存本地 结合camer2实现 前后摄像头切换,手机闪关灯,
- 指针和 php引用的区别,c的指针和php中的引用的区别
- python 实验九 文件与异常
- C#C#textbox设置滚动条