机器人,如何绘制的EditText虚线(android, how to draw dotted li

2019-06-28 07:29发布

我refered此链接: 我如何在Android中的虚线/虚线? 以及用于DashPathEffect 。 但是,这并不为我工作? 为什么? 我的代码:

public class NoteEditText extends EditText {
    private Paint mPaint;

    public NoteEditText(Context context) {
        super(context);
    }

    public NoteEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
        mPaint.setStrokeWidth(1);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mPaint.setColor(Color.DKGRAY);
        PathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1);  
        mPaint.setPathEffect(effects);
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int height = this.getHeight();
        int lineHeight = this.getLineHeight();
        int lineNum = height / lineHeight;
        L.l("line count: " + lineNum);
        for (int i = 0; i < lineNum; i++) {
            int y = (i + 1) * lineHeight;
            canvas.drawLine(0, y, this.getWidth() - 1, y, mPaint);
        }
    }
}

Answer 1:

该方法setPathEffect不受硬件加速的支持。 默认情况下,它是打开的(我认为由于Android 4.0)

http://developer.android.com/guide/topics/graphics/hardware-accel.html#unsupported

您可以关闭硬件加速与下面的代码片段在构造函数中:

setLayerType(View.LAYER_TYPE_SOFTWARE,NULL);



Answer 2:

new float[]{5,5,5,5}

尝试

new float[]{5,10,15,20}


Answer 3:

这应该工作。

的EditText EDITTEXT =(EditText上)v.findViewById(android.R.id.text1);

editText.setPaintFlags(editText.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG);



Answer 4:

我不认为你应该使用“for循环”画line.set setStrokeWidth($直径)可能是有用的。 我有写一个简单的视图支持此功能,细节在这里



文章来源: android, how to draw dotted line in edittext