Android 2.x自定义属性动画ValueAnimator
来源:互联网 发布:运动服淘宝 编辑:程序博客网 时间:2024/05/22 07:03
模仿3.0的ValueAnimator动画写的属性动画,实现基本功能
使用方法与ValueAnimator相同,直接上源码了!
import android.os.Handler;import android.os.Message;import android.view.animation.AccelerateDecelerateInterpolator;import android.view.animation.Interpolator;/** * 属性动画-精简版... * @author gy * @date 2014-5-8下午3:01:51 */public class ValueAnim {private static final int SPACETIME=20; private static final int STATE_START=0; private static final int SATTE_END=1; private static final int STATE_UPDATE=2; private long duration;//动画时长private Interpolator interpolator;private AnimationListener listener;private AnimatorUpdateListener updateListener;private float start,end;//开始结束数值public ValueAnim(){this(0, 0);}public ValueAnim(float start,float end){this(start,end,new AccelerateDecelerateInterpolator());}public ValueAnim(float start,float end,Interpolator interpolator){this.start=start;this.end=end;this.interpolator=interpolator;}public void setDuration(long duration) {this.duration = duration;}public void setInterpolator(Interpolator interpolator) {this.interpolator = interpolator;}public void setAnimListener(AnimationListener listener) {this.listener = listener;}/** * function: 开始值 * * @param start * * @ author:gaoyu 2014-8-14 下午3:33:36 */public void setStart(float start) {this.start = start;}public void setEnd(float end) {this.end = end;}public void setAnimatorUpdateListener(AnimatorUpdateListener updateListener) {this.updateListener = updateListener;}public void start(){new Thread(runnable).start();}Runnable runnable=new Runnable() {@Overridepublic void run() {handler.sendMessage(handler.obtainMessage(STATE_START));long time=0;float currentValue;float total=end-start;//变化的总量while (time<duration) {//计算当前时间相对总时间的值float in=(float)time/duration;//根据interpolator获得处理过的相对值float out=interpolator.getInterpolation(in);//开始值+相对值*总量->当前时间的值currentValue=start+total*out;//通知更新handler.sendMessage(handler.obtainMessage(STATE_UPDATE, currentValue));//增加时间time+=SPACETIME;try {Thread.sleep(SPACETIME);} catch (InterruptedException e) {e.printStackTrace();}}//结束currentValue=end;handler.sendMessage(handler.obtainMessage(STATE_UPDATE, currentValue));handler.sendMessage(handler.obtainMessage(SATTE_END));}};Handler handler=new Handler(){@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case STATE_START:if (listener!=null) {listener.onAnimationStart(ValueAnim.this);}break;case SATTE_END:if (listener!=null) {listener.onAnimationEnd(ValueAnim.this);}break;case STATE_UPDATE:if (updateListener!=null) {updateListener.onAnimationUpdate((Float) msg.obj);}break;}}}; /** * function: 动画更新监听 * * @ author:gaoyu*/public interface AnimatorUpdateListener { void onAnimationUpdate(float currentValue); } /** * function: 动画开始结束监听 * * @ author:gaoyu*/public interface AnimationListener { void onAnimationStart(ValueAnim animation); void onAnimationEnd(ValueAnim animation); }}
0 0
- Android 2.x自定义属性动画ValueAnimator
- android 属性动画(ValueAnimator)
- Android属性动画 ValueAnimator
- android 动画 属性动画 ValueAnimator
- Android开发 之 属性动画(自定义ValueAnimator的TypeEvaluator)
- Android属性动画之ValueAnimator
- Android属性动画之ValueAnimator
- Android 动画之属性动画ValueAnimator
- Android自定义控件:动画类(五)----属性动画ValueAnimator基本使用
- Android自定义控件:动画类(七)----属性动画ValueAnimator高级进阶(二)
- Android属性动画完全解析 ValueAnimator
- Android-Animator属性动画( ObjectAnimator , AnimatorSet , ValueAnimator )
- android属性动画相关类学习---ValueAnimator
- Android属性动画(ObjectAnimator、PropertyValuesHolder、ValueAnimator、AnimatorSet)
- Android属性动画ValueAnimator源码简单分析
- Android属性动画ValueAnimator快速上手
- Android属性动画之ValueAnimator使用
- Android属性动画——ValueAnimator
- 立此存照(6)[C语言]rand()函数与srand函数
- 【转】[专题学习][计算几何]
- ubuntu下的“用vim打开中文乱码,用cat打开正常显示”的解决方法
- zigbee绑定问题
- beego框架-时间
- Android 2.x自定义属性动画ValueAnimator
- 学习FPGA的网站推荐
- 动态规划1基本的概念
- @Autowired与@Resource的用法和区别
- uva 1492 - Adding New Machine(线段树)
- Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(三)
- Linux查看CPU和内存使用情况
- 在Mac上安装Ruby on Rails
- python Sphinx windows 安装