属性动画Animator玩法/自定义估值器TypeEvaluator实现抛物线曲线动画
来源:互联网 发布:测试虚拟机上的nginx 编辑:程序博客网 时间:2024/05/21 19:36
属性动画从Android3.0开始推出来的,与补间动画的不同,属性动画是真实改变了控件的属性。下面是多种属性动画并行和自定义估值器EvaluatorType实现的抛物线动画,高中物理公式s=1/2*g*t*t;
1.首先看前面三个radiation的点击动画,里面有alpha和scale动画,这里列举了三种方式实现动画并发
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { final RadioButton btn = (RadioButton) group.findViewById(checkedId); //第一种方式 /* ObjectAnimator animator = new ObjectAnimator(); animator.setFloatValues(1.0f, 0.5f, 1.0f); animator.setPropertyName("alpha"); animator.setDuration(500); animator.setTarget(btn); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value= (float) animation.getAnimatedValue(); btn.setScaleX(value); btn.setScaleY(value); } }); animator.start();*/
第二种实现方式:
/* PropertyValuesHolder holder1=PropertyValuesHolder.ofFloat("alpha",1.0f,0.5f,1.0f); PropertyValuesHolder holder2=PropertyValuesHolder.ofFloat("scaleX",1.0f,0.5f,1.0f); PropertyValuesHolder holder3=PropertyValuesHolder.ofFloat("scaleY",1.0f,0.5f,1.0f); ObjectAnimator objectAnimator=ObjectAnimator.ofPropertyValuesHolder(btn,holder1,holder2,holder3); objectAnimator.setDuration(500); objectAnimator.start();*/
第三种实现方式:
ObjectAnimator objectAnimator1=new ObjectAnimator().ofFloat(btn,"alpha",1.0f,0.5f,1.0f); ObjectAnimator objectAnimator2=new ObjectAnimator().ofFloat(btn,"scaleX",1.0f,0.5f,1.0f); ObjectAnimator objectAnimator3=new ObjectAnimator().ofFloat(btn,"scaleY",1.0f,0.5f,1.0f); AnimatorSet set=new AnimatorSet(); set.setDuration(500); set.playTogether(objectAnimator1,objectAnimator2,objectAnimator3); set.start();
注意:属性动画可以做颜色过渡动画,源码扣初来的片段如下
public static ValueAnimator ofArgb(int... values) { ValueAnimator anim = new ValueAnimator(); anim.setIntValues(values); anim.setEvaluator(ArgbEvaluator.getInstance()); return anim; }
下面是抛物线动画实现,主要是估值器的使用,重写估值计算规则
//自定义估值器,重写计算规则 class MyEvaluator implements TypeEvaluator<PointF> { public MyEvaluator() { } /** * @param fraction 动画执行了的百分比, * @param startValue 点的起始值 * @param endValue 点的最终值 * @return */ @Override public PointF evaluate(float fraction, PointF startValue, PointF endValue) { //抛物线方程式 s=1/2*g*t*t //定义初速度150,加速g=9.8,时间t=5s,就是动画设置的执行时间 float t = 5 * fraction*1.0f; PointF pointF = new PointF(); pointF.x = 150 * t; pointF.y = 0.5f * 98.0f * t * t; return pointF; } }
前面上述三种动画并发的第一种方式,设置vaules可以设置point,并且再updatelistener中不断的改变view的位置,代码如下:
image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ValueAnimator animator = new ValueAnimator(); MyEvaluator evaluator = new MyEvaluator(); animator.setDuration(5000); //第一.先设置value animator.setObjectValues(new PointF(0,0)); //第二.再设置估值器 animator.setEvaluator(evaluator); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { PointF pointF = (PointF) animation.getAnimatedValue(); //通过不断的改变view的坐标来实现抛物线动画 image.setX(pointF.x); image.setY(pointF.y); } }); animator.start(); }
注意:1.@param fraction 动画执行了的百分比,这个百分比是匀速返回的。
2. animator.setObjectValues();和animator.setEvaluator()
的先后顺序不能反,先设置值,再设置估值器,否则会不具体报空指针异常。
3. 总结:以后可以利用估值器实现更多的曲线动画,比如贝塞尔、正弦余弦动画等。
阅读全文
1 0
- 属性动画Animator玩法/自定义估值器TypeEvaluator实现抛物线曲线动画
- 属性动画-TypeEvaluator
- Android属性动画--TypeEvaluator
- Android 属性动画实现抛物线动画
- Android属性动画上手实现各种动画效果,自定义动画,抛物线等
- Android 属性动画 多动画执行 与 估值器 TypeEvaluator
- Android开发 之 属性动画(自定义ValueAnimator的TypeEvaluator)
- Android-Property 动画自定义TypeEvaluator
- PropertyAnimation属性动画 ValueAnimator实现自由落体 抛物线
- 属性动画抛物线
- 属性动画Animator
- 属性动画Animator学习
- android属性动画animator
- Animator属性动画
- animator属性动画
- 【Property Animator 属性动画】
- Android属性动画(Animator)
- Animator --属性动画
- 活动指示器UIActivityIndicatorView
- Intellij Idea不能热部署的解决方法
- bzoj 1029: [JSOI2007]建筑抢修 (贪心+优先队列)
- 如何处理原始文本数据(CNN情感分析yoom例子二)
- 判断一颗树是否为二叉搜索树
- 属性动画Animator玩法/自定义估值器TypeEvaluator实现抛物线曲线动画
- tomcat配置文件server.xml详解
- Android老师作业八
- bzoj3667 Rabin-Miller算法
- 『ORACLE』分析redo块
- android studio停留在Refreshing gradle project 解决方法
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- JAVA_关于JAVA中的数据类型
- POJ 1797 Heavy Transportation 笔记