#代码用途
比如当我们想实现数据的走势,通过一个动画能够非常直观的表现出来,给用户一个好的体验。
以下代码通过动画巧妙的避免了通过线程来实现动画效果。(推荐)
ValueAnimator mAnimator = ValueAnimator.ofFloat(0, 100);//绘制范围0到100
mAnimator.setDuration(1000);//设置动画执行完需要的时间
mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mPositionView.setMyPostion(new BigDecimal(mAnimator.getAnimatedValue().toString()).floatValue());//通过设置值不断重绘
}
});
mAnimator.start();
对比通过线程实现的绘制动画。
mLineView = (LineView) this.findViewById(R.id.line);
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch (msg.what) {
case MSG_DATA_CHANGE:
mLineView.setLinePoint(msg.arg1, msg.arg2);
break;
default:
break;
}
super.handleMessage(msg);
}
};
new Thread(){
public void run() {
for (int index=0; index<20; index++)
{
Message message = new Message();
message.what = MSG_DATA_CHANGE;
message.arg1 = mX;
message.arg2 = (int)(Math.random()*200);;
mHandler.sendMessage(message);
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mX += 30;
}
};
}.start();