2012-03-12 55 views
3

我遇到了使用canvas.drawText()方法的問題。無法將文本繪製到自定義視圖

我有一個自定義視圖,如下所示:

public class PagerIndicator extends View 
{ 
    @Override 
    public void onDraw(Canvas canvas) 
    {  
    Paint paint = new Paint(); 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.GRAY); 
    canvas.drawPaint(paint); 

    paint.setColor(Color.WHITE); 
    paint.setTextSize(10); 
    paint.setAntiAlias(true); 
    paint.setTextAlign(Align.LEFT); 
    canvas.drawText("TEST", 0, 0, paint); 
} 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<ysi.crm.PagerIndicator 
    android:id="@+id/swipe_page_indicator" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 
</LinearLayout> 

的drawPaint()方法工作,我可以看到灰色漆當我測試。但是,canvas.drawText()不是繪圖。我看不到灰色的文字。

我已經擊敗了這件事,我可以找到沒有其他人誰有這個問題,更不用說解決方案。我會非常感謝任何幫助。

回答

8

我以前就遇到了這個。您設置繪製的座標不是文本的左上角座標。它是文本的左下角座標。

正因爲如此,您的文字可能會被繪製在您視圖的上方。

+0

就是這樣!我無法相信我沒有抓住它。似乎有意使用左下角作爲原點,感謝Android。感謝您的幫助!! – bwiechart 2012-03-12 19:49:10

1

試試這個:

public class PagerIndicator extends View 
{ 
    @Override 
    public void onDraw(Canvas canvas) 
    {  
    Paint paint1 = new Paint(); 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.GRAY); 
    canvas.drawPaint(paint1); 

    Paint paint2 = new Paint(); 
    paint2.setColor(Color.WHITE); 
    paint2.setTextSize(10); 
    paint2.setAntiAlias(true); 
    paint.setTextAlign(Align.LEFT); 
    canvas.drawText("TEST", 0, 0, paint2); 
} 
+0

感謝您的評論,可惜這是我早先沒有用試過。我只是再次嘗試確定,但我仍然沒有看到文字。 – bwiechart 2012-03-12 19:45:29

+0

您是否嘗試將位置0,0更改爲另一個?我記得有問題,因爲文本並不完全在那個位置。 我也建議你將Size設置爲大。 – jsaye 2012-03-12 20:06:25

1

改變這一行:

canvas.drawText("TEST", 0, 0, paint2); 

到:

canvas.drawText("TEST", 100, 100, paint2);