关于ValueAnimation的使用:



ValueAnimator animation = ValueAnimator.ofObject(//此处的ofObject表示建立一个自定义TypeEvaluator的 ValueAnimator,除此之外还有ofFloat等,分别表示建立一个含FloatEvaluator等的ValueAnimator,
                new TypeEvaluator<Integer>() {
                    public Integer evaluate(float fraction, Integer startValue,
                            Integer endValue) {
                        // TODO Auto-generated method stub
                        Log.i("orignal-fraction", String.valueOf(fraction));
                        Log.i("orignal-startvalue", String.valueOf(startValue));
                        Log.i("orignal-startvalue", String.valueOf(endValue));
                        return 20;
                    }//fraction是TimeInterpolator的返回值,本函数的返回值为animation.getAnimatedValue()所获取的值,此处本代码fraction为0.2
                }, 12, 23);//此处的12,23用来表示属性的上下限,分别为上TypeEvaluator的参数的startValue和endValue
        animation.setDuration(5000);
        ValueAnimator.setFrameDelay(500);
        animation.setInterpolator(new TimeInterpolator() {
            public float getInterpolation(float input) {
                // TODO Auto-generated method stub
                Log.i("myinterpolation-input", String.valueOf(input));
                return 0.2f;
            }
        });//input参数是已逝去的时间占总时间的比例若直接返回该值,则本TimeInterpolator与linerInterpolator效果一样
        animation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            public void onAnimationUpdate(ValueAnimator animation) {
                // TODO Auto-generated method stub
                Log.i("update",
                        ((Integer) animation.getAnimatedValue()).toString());
            }
        });//本环节是直线animation效果的关键环节,可在本linstener中加入要改变的属性,并与animation.getAnimatedValue()所得的值联系起来
        animation.start();

代码运行部分结果:

160044701.jpg