上一篇的动画介绍谈了动画的一些基本使用方法,这一篇谈谈动画的进一步使用。

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动画(二)相关推荐

  1. 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台

    一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...

  2. 浅谈Android游戏开发基础和经验

    Android游戏开发基础和经验是本文要介绍的内容,主要是来了解并学习Android游戏开发的内容实例,具体关于Android游戏开发内容的详解来看本文. 做一个类似俄罗斯方块的android游戏开发 ...

  3. android fps 垂直同步,浅谈Android流畅度

    原标题:浅谈Android流畅度 哈哈 讲个故事 白 1 流畅度 关于流畅度谷歌官方给出的解释为:running at a consistent 60 frames per second, witho ...

  4. 浅谈Android中的MVP与动态代理的结合

    浅谈Android中的MVP与动态代理的结合 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在Android开发平台上接触MVP足足算起来大概已经有一个年头左右.从最开始到现在经 ...

  5. catia三维轴承_浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文

    浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文 一.概述 单排四点接触球转盘轴承是一种能够同时承受较大轴向负荷.径向负荷和倾覆力矩等综合载荷,集支承.旋转.传动.固定等多种功能于一身的特殊 ...

  6. 浅谈Android引用计数(2)

    在浅谈Android引用计数(1)中讲了LightRefBase实现对象计数管理的原理,这篇文章将要分析重量级的引用基类:RefBase的实现和它的作用. 下面是RefBase和相关类的类图: 图中可 ...

  7. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...

  8. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间 ...

  9. android分屏模式_浅谈 Android 7.0 多窗口分屏模式的实现

    从 Android 7.0 开始,Google 推出了一个名为"多窗口模式"的新功能,也就是我们常说的"分屏模式".那么,这个功能有什么用呢?作为开发者,我们又 ...

最新文章

  1. 浅谈民用无人机的行业化应用场景
  2. 神仙尬聊!哲学马云VS科技马斯克:生活就该每周工作12小时,开特斯拉玩遍三千城市...
  3. 编写jmeter测试用例_Jmeter性能测试系列篇(十)--批量用例执行结果检查设置
  4. 深入研究.NET 5的开放式遥测
  5. linux限制单个用户使用,linux下限制用户使用系统资源
  6. redhat bash: yum: 未找到命令..._常用linux yum 命令和 vim命令,这几个要熟记
  7. One-Error多标签分类_深度学习:如何在多标签分类问题中考虑标签间的相关性?
  8. 项目实战之服务端分页的实现——SQL
  9. 在Htdocs之外创建XAMPP / Apache服务文件[关闭]
  10. 通过思科构造局域网_从Cisco DNA中心的管理的和设置的非结构Catalyst 9800无线局域网控制器...
  11. 仿斗鱼、美团、网易邮箱等 弹窗效果
  12. 树莓派ubuntu默认用户名密码及密码修改
  13. MTK 手机支持3D
  14. FAT文件系统详解(一)
  15. matlab rand函数解释,matlab rand()函数五种用法
  16. 安卓辅助功能获取控件id
  17. 频繁出现域名无法解析该如何处理
  18. 28.html设置字体
  19. JAVA 根据商品属性生成(SKU)规格算法
  20. Android 图形架构 之三—— 创建Layer、Surface、SurfaceControl

热门文章

  1. BUUCTF:[MRCTF2020]天干地支+甲子
  2. #2021.5.20日亲测有效office 2019家庭与学生版安装OneNote 2016软件
  3. ArcMap中3D符号化显示
  4. 广发华福收市短评(0605)
  5. localStorage中怎么存对象?
  6. 爱米云网盘连接服务器失败,爱米云网盘服务端
  7. Android 点击拍照,长按录像保存本地 结合camer2实现 前后摄像头切换,手机闪关灯,
  8. 指针和 php引用的区别,c的指针和php中的引用的区别
  9. python 实验九 文件与异常
  10. C#C#textbox设置滚动条