0

カスタムコンポーネントの描画にビットマップを動的に追加します。

さて、この行になると:

    line = Bitmap.createBitmap(line, 0, 0, line.getWidth(), 1);

ビットマップをコンポーネントの幅まで引き伸ばしたいのですが。ここで使用しますline.getWidth()が、言う方法があればいいのにと思いますthis.getWidth。残念ながら、それはコンストラクターにあり、ビューはまだその幅を認識していません。

カスタムコンポーネントのコードは次のとおりです。

package com.adylitica.components;

import com.adylitica.activity.R;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;

/**
 * Defines a custom EditText View that draws lines between each line of text that is displayed.
 */
public class EditTextNotes extends EditText {

private Rect mRect;
private Bitmap line;
public static int nbLines = 0;
private SharedPreferences settings;


public EditTextNotes(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    line = BitmapFactory.decodeResource(context.getResources(), R.drawable.line_thin_new);
    line = Bitmap.createBitmap(line, 0, 0, line.getWidth(), 1);

    mRect = new Rect();
}

public EditTextNotes(Context context, AttributeSet attrs) {
    super(context, attrs);

    line = BitmapFactory.decodeResource(context.getResources(), R.drawable.line_thin_new);
    line = Bitmap.createBitmap(line, 0, 0, line.getWidth(), 1);

    mRect = new Rect();

}

public EditTextNotes(Context context) {
    super(context);

    line = BitmapFactory.decodeResource(context.getResources(), R.drawable.line_thin_new);
    line = Bitmap.createBitmap(line, 0, 0, line.getWidth(), 1);

    mRect = new Rect();
}


@Override
protected void onDraw(Canvas canvas) {

    int count = getLineCount();

    Rect r = mRect;

    int baseline = 0;
    int addSize = 0;
    canvas.drawBitmap(line, 0, baseline, null);

    for (int i = 0; i < count; i++) {
        baseline = getLineBounds(i, r) + addSize;
        canvas.drawBitmap(line, 0, baseline, null);
        nbLines++;
    }

    super.onDraw(canvas);
}

}

PS:ビットマップは9パッチされています。

ありがとう。

4

1 に答える 1

1

コンストラクターで測定を行うべきではありません。カスタムビューでは、をオーバーライドするのが最適onSizeChanged()です。これは、ビューが現在の幅と高さでビュー階層に追加されたときに呼び出され、ビューのサイズが変更された場合は、現在の値と古い値で呼び出されます。詳細については、 [レイアウトイベントの処理]を参照してください。

于 2012-12-16T06:04:37.657 に答える