属性动画简单分析
来源:互联网 发布:算王算量软件破解版 编辑:程序博客网 时间:2024/06/04 18:49
//1.-------------属性动画基础--------------------iv.setTranslationX(100);iv.setScaleX(scaleX);iv.setAlpha(alpha);iv.setRotation(rotation)iv.setBackgroundColor(color);//只要view里面有setXXX()方法就可以通过反射达到变化的目的ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationX", 0f,200f);ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "backgroundColor", Color.RED,Color.BLUE);oa.setDuration(500);oa.start();
//2.-------------多个动画同时执行---------------------- //方法 1) 设置动画监听,同步操作其他的属性 ObjectAnimator animator = ObjectAnimator.ofFloat(iv, "wu", 0f,100f);// ObjectAnimator animator = ObjectAnimator.ofFloat(iv, "translationX", 0f,100f); animator.setDuration(300); animator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { // 监听动画回调// animation.getAnimatedFraction();//动画执行的百分比 0~1 //API 12+ float value = (float) animation.getAnimatedValue();//得到0f~100f当中的这个时间点对应的值 iv.setScaleX(0.5f+value/200); iv.setScaleY(0.5f+value/200);// iv.setTranslationX(value); } }); animator.start(); animator.setRepeatCount(2); animator.setRepeatCount(ValueAnimator.INFINITE); animator.setRepeatMode(ValueAnimator.RESTART); animator.setRepeatMode(ValueAnimator.REVERSE.) animator.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onAnimationEnd(Animator animation) {// animator.setRepeatCount(ValueAnimator.RESTART); } @Override public void onAnimationCancel(Animator animation) { } }); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { // TODO Auto-generated method stub super.onAnimationEnd(animation); } }); //方法 2)---------------ValueAnimator---如果只需要监听值变化就用ValueAnimator--------------- ValueAnimator animator = ValueAnimator.ofFloat(0f, 200f); animator.setDuration(200); animator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float) animation.getAnimatedValue();//得到0f~100f当中的这个时间点对应的值 iv.setScaleX(0.5f+value/200); iv.setScaleY(0.5f+value/200); } }); animator.start(); //方法 3) PropertyValuesHolder holder1 = PropertyValuesHolder.ofFloat("alpha", 1f,0.5f); PropertyValuesHolder holder2 = PropertyValuesHolder.ofFloat("scaleX", 1f,0.5f); PropertyValuesHolder holder3 = PropertyValuesHolder.ofFloat("scaleY", 1f,0.5f); ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(iv, holder1,holder2,holder3); animator.setDuration(200); animator.start(); //方法 4)-------------动画集合----------------- ObjectAnimator animator1 = ObjectAnimator.ofFloat(iv, "translationX", 0f,100f);// animator1.setRepeatCount(3); ObjectAnimator animator2 = ObjectAnimator.ofFloat(iv, "alpha", 0f,1f);// animator2.setStartDelay(startDelay)//设置延迟执行 ObjectAnimator animator3 = ObjectAnimator.ofFloat(iv, "scaleX", 0f,2f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(500);// animatorSet.play(animator3).with(animator2).after(animator1);//animator1在前面 animatorSet.play(animator3).with(animator2).before(animator1);//animator1在后面// animatorSet.playTogether(animator1,animator2,animator3); animatorSet.playSequentially(animator1,animator2,animator3); animatorSet.start();//3.-------------估值器用法----------------------
//估值器// 估值计算方法---可以在执行的过程当中干预改变属性的值---做效果:用自己的算法来控制//不断地去计算修改坐标//x匀速运动 x=v*t 为了看起来效果好我让t变成fraction*5ValueAnimator valueAnimator = new ValueAnimator();valueAnimator.setInterpolator(new LinearInterpolator());valueAnimator.setDuration(5000);valueAnimator.setObjectValues(new PointF(0,0));final PointF pointF = new PointF();valueAnimator.setEvaluator(new TypeEvaluator<PointF>() { @Override public PointF evaluate(float fraction, PointF startValue, PointF endValue) { pointF.x = 200 * fraction * 5; pointF.y = 0.5f * 9.8f * (fraction*5) * (fraction*5) ; return pointF; }});valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { PointF f = (PointF) animation.getAnimatedValue(); iv.setX(f.x); iv.setY(f.y); }});valueAnimator.start();//颜色估值器ValueAnimator valueAnimator = new ValueAnimator();valueAnimator.setObjectValues(Color.BLUE,Color.RED);valueAnimator.setDuration(2000);valueAnimator.setEvaluator(new ArgbEvaluator());valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { iv.setBackgroundColor((Integer) animation.getAnimatedValue()); }});valueAnimator.start();//4.-------------插值器(加速器)Interpolater---------------------
ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationY", 0f,1000f);oa.setDuration(800);oa.setInterpolator(new AccelerateInterpolator()); //加速插值器oa.setInterpolator(new DecelerateInterpolator()); //减速插值器oa.setInterpolator(new AccelerateDecelerateInterpolator()); //加速减速插值器oa.setInterpolator(new BounceInterpolator());// 弹跳插值器oa.setInterpolator(new AnticipateInterpolator()); // 回荡秋千插值器oa.setInterpolator(new CycleInterpolator(5)); // 正弦周期变换插值器oa.start();
阅读全文
0 0
- 属性动画简单分析
- Android属性动画ValueAnimator源码简单分析
- Android属性动画ObjectAnimator源码简单分析
- Android属性动画AnimatorSet源码简单分析
- Android属性动画ObjectAnimator源码简单分析
- 属性动画简单分析(一)
- 属性动画简单应用
- 属性动画-简单入门
- Anroid简单属性动画
- 属性动画简单操作
- 简单的属性动画
- 属性动画源码分析
- Android属性动画分析
- Android属性动画分析
- android属性动画分析
- 属性动画源码分析
- Animator 属性动画简单使用
- 几个简单动画属性使用
- JQ插入和移除HTML标签
- 判断大小端的几种方法
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛J(字典树 or map)
- 数据库的进入、查看等命令
- 关于Session的知识点
- 属性动画简单分析
- HTML基础学习-16-text文本相关属性设置
- Redux总结2:action
- myeclipsed发布javaweb到tomcat
- 多个字符串关键字同时满足匹配一个字符串和多个字符串关键字分割一个字符串
- C语言程序设计(43)
- 洛谷 P1345 奶牛的电信Telecowmunication
- 最长上升子序列问题(LIS)
- HTML基础学习-17-border 边框相关属性学习