在自定义android Edittext

时间:2016-06-01 19:32:27

标签: android android-edittext android-canvas android-view

我创建了一个自定义的EditText类,它在每行的左侧绘制行号。这工作正常,但我也想将行号的背景设置为灰色,并实现如下:

what i want it to look like

在onDraw方法中,我绘制了数字,我试图绘制非常粗的线,但无论我把它放在哪里,在调用之前绘制线号或之后,它总是被绘制在线号上。这是我的代码

protected void onDraw(Canvas canvas) {
    int baseline = getBaseline();

    for (int i = 0; i < getLineCount(); i++) {
        //line still gets drawn over the text
        canvas.drawText("" + (i + 1), rect.left, baseline, paint);
        canvas.drawLine(rect.left,baseline,rect.right,rect.top,fill);
        canvas.drawText("" + (i + 1), rect.left, baseline, paint);

        baseline += getLineHeight();

    }

    super.onDraw(canvas);
}

有关如何让线条出现在后台的任何建议吗?

由于

1 个答案:

答案 0 :(得分:0)

尝试绘制行号的宽度。 之前循环:

Paint linePaint = new Paint(getPaint()); // copy original Paint
linePaint.setARGB(255, 200, 200, 200); // some grey color
String strCount = String.valueOf(getLineCount());

float[] symbolWidths = new float[strCount.length()];
linePaint.getTextWidths(strCount, symbolWidths);

float strokeWidth = 0;
for (float width : symbolWidths)
    strokeWidth += width;
strokeWidth = strokeWidth *2/*I dnt knw y*/ + strokeWidth;
linePaint.setStrokeWidth(strokeWidth);
setPadding((int)strokeWidth / 2, 0, 0, 0); // text padding

canvas.drawLine(rect.left, getLineHeight() * getLineCount(), rect.right, rect.top, linePaint);