无法将文本绘制到自定义视图

Posted

技术标签:

【中文标题】无法将文本绘制到自定义视图【英文标题】:Cannot draw text to custom view 【发布时间】:2012-03-12 19:34:12 【问题描述】:

我在使用 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_
android:layout_>
<ysi.crm.PagerIndicator
    android:id="@+id/swipe_page_indicator"
    android:layout_
    android:layout_/>
</LinearLayout>

drawPaint() 方法正在工作,我在测试时可以看到灰色的油漆。但是, canvas.drawText() 不是绘图。我看不到灰色顶部的文字。

我已经把这个东西打死了,我找不到其他人遇到这个问题,更不用说解决方案了。如果有任何帮助,我将不胜感激。

【问题讨论】:

【参考方案1】:

我以前遇到过这个。您设置它绘制的坐标不是文本的左上角坐标。它是文本的左下角坐标。

因此,您的文本可能被绘制在视图顶部。

【讨论】:

就是这样!我不敢相信我没有抓住它。似乎故意混淆使用左下角作为原点,感谢 Android。谢谢你的帮助!!【参考方案2】:

试试这个:

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,0 更改为另一个位置?我记得有问题,因为文本不完全在那个位置。我还建议您将 Size 设置为大。【参考方案3】:

改变这一行:

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

到:

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

【讨论】:

以上是关于无法将文本绘制到自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

将多个视图合并到自定义视图中

RxSwift 不将数据绑定到自定义集合视图单元格

添加和布局从 xib 加载的子视图到自定义单元格

Android - 将搜索栏添加到自定义列表视图和简单适配器

将子视图添加到自定义 viewForHeaderInSection 会中断 VoiceOver 导航

如何将子视图添加到自定义 UICollectionViewCell