您的位置:首页 > 移动开发 > Android开发

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

2017-12-20 14:45 363 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: