美文网首页
包含中间删除线的TextView(动态)

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

作者: 骑着蜗牛闯世界666 | 来源:发表于2017-09-24 16:50 被阅读0次

    有时候会遇到这样子的需求,需要在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(动态)

          本文链接:https://www.haomeiwen.com/subject/nynkextx.html