2016-06-01 9 views
1

私はすべての行の左に線の番号を描画するカスタムEditTextクラスを作成しました。これは正常に動作しますが、私はまた、このような何かをグレーと達成するために行番号の背景を設定したい:私は私は本当に太い線を描画しようとした数字を引くが、それは常に取得onDrawメソッドでカスタムアンドロイドの背景に線の番号を描画するEdittext

what i want it to look like

私はそれを置くにしても、行番号の上に引かれます。ここに私のコードです

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

あなたは 'rect'を更新している場所、私は表示されませんので、私はそれが新しいラインの' drawLine()は '前の行の数の上に描いていますよね。バックグラウンドに 'drawRect()'を使い、各行に対して 'rect'を更新するのはなぜですか? –

+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); 
関連する問題