2012-09-13 29 views
3

我试图实现自定义视图中显示的文本,但与绘制文本的一个问题(文字为红色,视图的背景为绿色):自定义的TextView类和文本绘制

enter image description here

源代码位于pastebin

+0

为什么这是什么问题?你的目标是什么? –

+0

你想用TextView实现这一点是不可能的?使用或扩展现有的TextView类有很多好处,包括换行和定位。 – alanv

+0

我知道我可以使用TextView,但我需要实现我自己的,这是我的任务。 – arts777

回答

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变量。所以如果你的文本仍然没有被正确绘制,你应该改变它。

+0

现在它没有画什么:( – arts777

+0

刚刚更新了我的答案。 – hwrdprkns

3

你的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); 
    } 
} 

}