android在指定时间内匀速画一条直线

来源:互联网 发布:淘宝托管协议 编辑:程序博客网 时间:2024/05/17 01:41
1.效果图:

2.自定义view实现
public class UniformLine extends View {    private int x, y, nextX, nextY, incrementY, incrementX;    public UniformLine(Context context) {        super(context);    }    public UniformLine(Context context, int x, int y, int nextX, int nextY) {        super(context);        this.x = x;        this.y = y;        this.nextX = nextX;        this.nextY = nextY;        init();    }    private void init() {        p = new Paint();        p.setColor(Color.WHITE);        p.setAntiAlias(true);        p.setStrokeWidth(4.0f);        ValueAnimator valueAnimatorX = ValueAnimator.ofFloat(x, nextX);        valueAnimatorX.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                incrementX =  Math.round((Float) animation.getAnimatedValue());                invalidate();            }        });        ValueAnimator valueAnimatorY = ValueAnimator.ofInt(y, nextY);        valueAnimatorY.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                incrementY = (int) animation.getAnimatedValue();                invalidate();            }        });        AnimatorSet animatorSet = new AnimatorSet();        LinearInterpolator ll = new LinearInterpolator();        animatorSet.setInterpolator(ll);//匀速        animatorSet.setDuration(2000);        animatorSet.playTogether(valueAnimatorX, valueAnimatorY);        animatorSet.start();    }    Paint p;    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawLine(Util.Div(Math.round(x)), Util.Div(Math.round(y)),                Util.Div(Math.round(incrementX)), Util.Div(Math.round(incrementY)), p);// 斜线    }}
3.调用
    uniformLine = new UniformLine(mContext, 300, 500, 600, 200);    addView(uniformLine);




原创粉丝点击