0

onDraw でカスタム EditText ビューを作成しましたが、これは赤いマージン ラインを持つことを意図しています。問題は、下にスクロールすると行が消えることです。このコードは、values フォルダーで幅が事前に定義されている余白を描画し、colors.xml から事前に定義された色で色を付けます。これが私のコードです:

package com.lioncode.notepad;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.EditText;

Public class LinedEditText extends EditText {

private static Paint linePaint;

static {
    linePaint = new Paint();
    linePaint.setColor(Color.DKGRAY);
    linePaint.setStyle(Style.STROKE);
}

public LinedEditText(Context context, AttributeSet attributes) {
    super(context, attributes);
    init();
}

private Paint marginPaint;
private float margin;
private int paperColor;

private void init() {
    Resources myResources = getResources();

    marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    marginPaint.setColor(myResources.getColor(R.color.notepad_margin));

    paperColor = myResources.getColor(R.color.notepad_paper);
    margin = myResources.getDimension(R.dimen.notepaper_margin);

}

@Override
protected void onDraw(Canvas canvas) {
    Rect bounds = new Rect();
    int firstLineY = getLineBounds(0, bounds);
    int lineHeight = getLineHeight();
    int totalLines = Math.max(getLineCount(), getHeight() / lineHeight);

    for (int i = 0; i < totalLines; i++) {
        int lineY = firstLineY + i * lineHeight;
        canvas.drawLine(bounds.left, lineY, bounds.right, lineY, linePaint);
    }

    // draw margin
    canvas.drawLine(margin, 0, margin, getMeasuredHeight(), marginPaint);

    // move the text from along the margin
    canvas.save();
    canvas.translate(margin, 0);
    super.onDraw(canvas);
}

     }
4

1 に答える 1

1

合計行数を、ユーザーが到達することのない大きな数に置き換えます。

于 2013-04-01T22:45:29.367 に答える