无法在自定义视图中绘制文本。

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() 方法没有绘制出来,我在灰色上面看不到任何文本。

我已经尝试了很多方法,但是没有找到其他人遇到过这个问题,更别说解决方案了。非常感谢您的任何帮助。

3个回答

8

我之前也遇到过这个问题。你设置的绘制坐标不是文本的左上角坐标,而是文本的左下角坐标。

因此,你的文本可能会被绘制在视图的顶部之上。


就是这样!我简直不敢相信我没发现它。使用左下角作为原点似乎是有意混淆视听,谢谢安卓。感谢您的帮助!! - bwiechart

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

谢谢您的评论,不幸的是,这是我先前尝试过但无功而返的事情。我刚刚再次尝试以确保,但仍然没有看到文本。 - bwiechart
你尝试过将位置0,0更改为其他位置吗?我记得曾经因为文本不在那个位置而遇到问题。我还建议你将大小设置得更大一些。 - jsaye

1

更改此行:

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

翻译:to:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接