Настраиваемый виджет TextView и текст, чертеж


Я пытаюсь реализовать пользовательский вид для отображения текста, но есть проблема с рисованием текста (Текст красный, фон Вида зеленый):

Введите описание изображения здесь

Исходный код находится наpastebin .

2 3

2 ответа:

Вместо того, чтобы рисовать текст в верхней части вида с помощью(L 91):

canvas.drawText(mText, 0, mText.length() - 1, 0, 0, mPaint);

Попробуйте:

canvas.drawText(mText, 0, mText.length() - 1, 0, canvas.getHeight(), mPaint);

Обратите внимание, что настройки выравнивания хранятся в переменной Paint. Так что вам, вероятно, следует изменить это, если ваш текст все еще не нарисован правильно.

Есть некоторые проблемы с вашим методом onDraw (). Поскольку вы явно не изменили выравнивание текста, Текст по умолчанию выровнен по левому краю. В этом режиме текст рисуется слева (x) направо над базовой линией(y). В коде x = 0 и y = 0 и, следовательно, текст начинают рисовать от x=0 вправо и выше базовой линии y = 0, и поэтому ваш текст не виден. вот модифицированная версия вашего кода:

Открытый класс fasttextview расширяется Смотреть {

private Context mContext;
private String mText = "";
private int mTextSize;
private Paint mPaint;

private int paddingLeft   = 0;
private int paddingRight   = 0;
private int paddingTop    = 0;
private int paddingBottom = 0;

private int fontSize = 100;

public void setText(String text)
{
    mText = text;
}

public FastTextView (Context context)
{
    super(context);
    initialize();
}

public FastTextView (Context context, AttributeSet attrs)
{
    super(context, attrs);
    initialize();
}

public void setPaddingLeft(int padding)
{
    paddingLeft = padding;
}

public void setPaddingRight(int padding)
{
    paddingRight = padding;
}

public void setPaddingBottom(int padding)
{
    paddingBottom = padding;
}

public void setPaddingTop(int padding)
{
    paddingTop = padding;
}

public void setFontSize(int size)
{
    fontSize = size;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    Rect rect = new Rect();
    mPaint.getTextBounds(mText.toString(), 0, mText.length(), rect);

    int width = Math.max(rect.width(), getSuggestedMinimumWidth()) + paddingLeft + paddingRight;
    int height = Math.max(rect.height(), getSuggestedMinimumHeight()) + paddingTop + paddingBottom;

    setMeasuredDimension(width, height);
}

/**
 * Initialize the view
 */
private void initialize()
{
    mContext = getContext();
    mPaint = new Paint();
    mPaint.setColor(Color.RED);
    mPaint.setTextSize(fontSize);
    mPaint.setTextAlign(Align.LEFT);
    setBackgroundColor(Color.GREEN);
}

@Override
protected void onDraw(Canvas canvas)
{
    super.onDraw(canvas);
    canvas.drawColor(Color.BLUE);
    int x = paddingLeft;
    int y = paddingTop + fontSize;

    if (mText.length() > 0) {
        canvas.drawText(mText, x, y-fontSize/4, mPaint);
    }
}

}