有时候会遇到这样子的需求,需要在textview的中间增加多一条删除线,我们知道,textview本身就有这样子的API,通过textview.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);就可以做到,但是,如果要求这个删除线是动态画出来的,而不是一开始就显示完整的话,这个API就不能满足我们的需求了,那么,怎样能够少代码的实现这样子的需求呢?
其实实现起来很简单,只需要重写TextView的onDraw方法,然后在这里去实现去做画线的操作即可,划线的方法也很简单,定义一下划线的速度还有每次划线的宽度,再draw完之后,再post一条线程,在一定时间之后去刷新,这样子就能够实现划线的操作了。
实现的代码如下:
public class MiddleLineTextView extends TextView {
private static final int DRAW_INTERVAL_TIME = 2;
private static final int LINE_WIDTH = 4;
private static final int mStep = 20;
private int mNowX = 0;
private boolean mNeedLine;
private Paint mPaint;
public MiddleLineTextView(Context context) {
super(context);
mPaint = new Paint();
mPaint.setColor(Color.Black);
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(LINE_WIDTH);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mNeedLine) {
canvas.drawLine(0, getMeasuredHeight() / 2, mNowX, (getMeasuredHeight() / 2), mPaint);
mNowX += mStep;
if (mNowX <= getMeasuredWidth()) {
postInvalidateDelayed(DRAW_INTERVAL_TIME);
}
}
}
public void setNeedLine(boolean mNeedLine) {
this.mNeedLine = mNeedLine;
}
}