本篇内容介绍了“Android如何使用自定义view在指定时间内匀速画一条直线”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
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);
“Android如何使用自定义view在指定时间内匀速画一条直线”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
网络异常,请检查网络