您的onDraw()方法存在一些问题。由于您没有显式地更改文本对齐方式,因此文本默认左对齐。在此模式下,文本从左侧(x)向右绘制,在基线(y)上方。在您的代码中,x=0且y=0,因此文本从x=0开始向右绘制,在基线y=0之上,因此您的文本不可见。以下是您代码的修改版本:
public class FastTextView extends View {
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);
}
}
}
不使用(L 91)中的以下代码在视图顶部绘制文本:
canvas.drawText(mText, 0, mText.length() - 1, 0, 0, mPaint);
尝试:
canvas.drawText(mText, 0, mText.length() - 1, 0, canvas.getHeight(), mPaint);
请注意,对齐设置存储在Paint
变量中。如果您的文本仍然无法正确绘制,则应更改该变量。
drawText
函数时,似乎 y 坐标参数指定的是文本的下边缘。因此,通过传递 0,文本的下边缘将会在视图的顶部,文本将被向上绘制(超出视图范围)。 - Sherif elKhatib