2012-09-13 26 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); 
    } 
} 

}