关于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();
代码运行部分结果:
转载于:https://blog.51cto.com/rainlee/1297096