包含中间删除线的TextView(动态)

有时候会遇到这样子的需求,需要在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;
    }
}

你可能感兴趣的:(包含中间删除线的TextView(动态))