我创建了一个自定义的EditText类,它在每行的左侧绘制行号。这工作正常,但我也想将行号的背景设置为灰色,并实现如下:
在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);
}
有关如何让线条出现在后台的任何建议吗?
由于
答案 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);