开源地址: https://github.com/JakeWharton/NineOldAndroids

简单介绍:NineOldAndroids是一款支持在低版本号开发的Android动画的框架 包含了一系列如ViewAnimator,ObjectAnimator,

ViewPropertyAnimator等API,攻克了Tween动画中移动过程仅仅显示移动效果,而不是真正组件的问题.

1)创建ObjectAnimator

ObjectAnimator anim1=ObjectAnimator.ofFloat(balls.get(0),"y",0f,getHeight()-balls.get(0).getHeight()).setDuration(500);

调用開始 animation.start();

克隆 ObjectAnimator anim2=anim1.clone();

2)定义动画组

ObjectAnimator animDown=ObjectAnimator.ofFloat(balls.get(2), "y",0f,getHeight()-balls.get(2).getHeight()).setDuration(500);
ObjectAnimator animUp=ObjectAnimator.ofFloat(balls.get(2), "y",getHeight()-balls.get(2).getHeight(),0f).setDuration(500);
AnimatorSet s1=new AnimatorSet();

使动画具有连贯性 s1.playSequentially(animDown,animUp);

使动画时间開始一致 animation.playTogether(anim1,anim2,s1);

3)值动画(AnimatorInflater布局载入器)

ValueAnimator alphaAnimator=(ValueAnimator) AnimatorInflater.loadAnimator(AnimationLoading.this,R.anim.animator);
alphaAnimator.setTarget(balls.get(1));
alphaAnimator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
balls.get(1).setAlpha((Float) animation.getAnimatedValue());
}
});

4)动画集

AnimatorSet s1=(AnimatorSet) AnimatorInflater.loadAnimator(AnimationLoading.this,R.anim.animator_set);

s1.setTarget(balls.get(2));

对象动画(移动/颜色改变)

ObjectAnimator s2=(ObjectAnimator) AnimatorInflater.loadAnimator(AnimationLoading.this, R.anim.color_animator);

s2.setTarget(balls.get(3));

定义动画顺序

((AnimatorSet)animation).play(animX).before(animY);//animX在animY前面

((AnimatorSet)animation).play(animX).with(animY);//animX与animY同步运行

//圆弧加速器

new CycleInterpolator(2.0f)





//定义各种属性>汇总

PropertyValuesHolder animY=PropertyValuesHolder.ofFloat("y",balls.get(1).getY(),getHeight()-100);
PropertyValuesHolder alpha=PropertyValuesHolder.ofFloat("alpha",1.0f,.5f);
ObjectAnimator pvhAlpha=ObjectAnimator.ofPropertyValuesHolder(balls.get(1), animY,alpha).setDuration(1000);

//设置放大动画

PropertyValuesHolder widthHolder=PropertyValuesHolder.ofFloat("width",ball.getWidth(),ball.getWidth()*2);
PropertyValuesHolder heightHolder=PropertyValuesHolder.ofFloat("height",ball.getHeight(),ball.getHeight()*2);
PropertyValuesHolder xPt=PropertyValuesHolder.ofFloat("x",ball.getX(),ball.getX()-BALL_SIZE/2f);
PropertyValuesHolder yPt=PropertyValuesHolder.ofFloat("y",ball.getY(),ball.getY()-BALL_SIZE/2f);
ObjectAnimator sumAnimator=ObjectAnimator.ofPropertyValuesHolder(ball,widthHolder,heightHolder,xPt,yPt).setDuration(750);
sumAnimator.setRepeatMode(ValueAnimator.REVERSE);
sumAnimator.setRepeatCount(1);//设置repeatCount=1使其恢复原样

//转换动画的轨迹

bounceAnim.reverse();



***************************************ObjectAnimator组件应用*************************************



位移:移动的单位为像素,能够指定一系列的位置

ObjectAnimator.ofFloat(target,"translationX",0,50).setDuration(duration).start();
ObjectAnimator.ofFloat(target,"translationY",0,50,-50,0).setDuration(duration).start();

缩放:1.0f代表为原来长/宽度的1倍,同理其它.全部的倍数都是因最早设定的宽度成倍

ObjectAnimator.ofFloat(target,"scaleX",1,2,1).setDuration(duration).start();
ObjectAnimator.ofFloat(target,"scaleY",1,2).setDuration(duration).start();

透明度:1.0f表示不透明 0表示全透明

ObjectAnimator.ofFloat(target,"alpha",1,0,1).setDuration(duration).start();

旋转:

ObjectAnimator.ofFloat(target,"rotationX",0,180,0).setDuration(duration).start();
ObjectAnimator.ofFloat(target,"rotationY",0,360).setDuration(duration).start();
ObjectAnimator.ofFloat(target,"rotation",0,180,0).setDuration(duration).start();

设置变换中心;当然,多个动画能够组合变换

ViewHelper.setPivotX(target,target.getWidth()/2);
ViewHelper.setPivotY(target,target.getHeight()/2);

***************************************ViewPropertyAnimator组件应用*************************************

animate(target).setDuration(2000);
animate(animatingButton).alpha(0);
animate(animatingButton).x(xValue).y(yValue);
animate(animatingButton).rotationYBy(720);

Android开源-NineOldAndroids的更多相关文章

  1. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

  2. Android开源项目分类汇总

    目前包括: Android开源项目第一篇——个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...

  3. 100个Github上Android开源库

    项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, ...

  4. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  5. 直接拿来用!最火的Android开源项目(二)(转)

    GitHub上的开源项目不胜枚举,通过这些项目,也能让开发者在应用开发过程中事半功倍,作为开发者的你,在用这些开源项目吗?今天我们将介绍另外20个在GitHub上备受欢迎的Android开源项目,你准 ...

  6. GitHub 优秀的 Android 开源项目(转)

    今天查找资源时看到的一篇文章,总结了很多实用资源,十分感谢原作者分享. 转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介 ...

  7. GitHub上排名前100的Android开源库介绍(来自github)

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...

  8. 直接拿来用!最火的Android开源项目

    GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上.更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要.利用这些项目,有时能够让你 ...

  9. GitHub Top 100的Android开源库

    摘要: 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索Java语言选择「Best M... 本项目主要对目前 GitH ...

随机推荐

  1. atitit.微信支付的教程文档 attilax总结

    atitit.微信支付的教程文档 attilax总结 1. 支付流程概览 1 2. 设置支付起始文件夹   host/app/paydir/ 1 3. 设置oauth验证域名 1 4. 測试文件夹 能 ...

  2. nginx+lua+redis 处理APK包替换

    nginx + lua +redis 安装与使用入门: http://huoding.com/2012/08/31/156 nginx httpEchoModule : http://wiki.ngi ...

  3. VLC 源代码结构

    x64 sudo apt-get install -y liblua5.2-dev libmad0-dev libavutil-dev libavcodec-dev libavformat-dev l ...

  4. HDU 4554 叛逆的小明

    叛逆的小明 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submiss ...

  5. mac git xcrun error active developer path 错误

    一:情景: 在mac下使用git;xcode4.6的环境时,需要安装command line tools ,但是在装了xcode5之后,就不需要安装command line tools了,默认已经集成 ...

  6. Windows下如何安装 Composer

    如何安装 Composer Windows下如何安装 Composer 下载 Composer 安装前请务必确保已经正确安装了 PHP.打开命令行窗口并执行 php -v 查看是否正确输出版本号. 打 ...

  7. marquee.js

      图片无缝滚动工具类 CreateTime--2018年3月7日17:11:03 Author:Marydon /** * 图片无缝滚动 * @description * 将要滚动的图片复制一份作为 ...

  8. MVC3 模板页页预留Section

    一.模板页 Razor出现后我们就可以选择不再使用asp.net master 模板页.取而代之的是cshtml razor的模板文件.用法个人认为还是和master模板页类似.但在mater模板页的 ...

  9. 将HG版本库推送到Git服务器

    如何将HG版本库推送到Git服务器? 目的 习惯使用HG来进行版本管理,但是GitHub代码统计比Bitbucket要丰富,所以准备主力仓库选用Bitbucket,GitHub作为备用仓库. GitH ...

  10. 多线程-CAS原理

    背景 在JDK1.5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁,锁机制存在以下问题: (1)在多线程竞争中,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题 ...