Настраиваемый виджет TextView и текст, чертеж
Я пытаюсь реализовать пользовательский вид для отображения текста, но есть проблема с рисованием текста (Текст красный, фон Вида зеленый):
Исходный код находится наpastebin .
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); } }
}