【问题标题】:Can we add text to a drawable?我们可以将文本添加到可绘制对象吗?
【发布时间】:2014-02-17 06:49:14
【问题描述】:

我想创建一个看起来像这样的drawable。

我知道如何创建图像背景,但即使在搜索之后,我也无法找到如何为该可绘制文件提供文本。有什么方法可以让可绘制文件也包含文本完全相同?

我不能使用 textview,因为它是一个选项卡,我需要将 drawables 设置为背景资源(这就是我所知道的,如果我错了,请纠正我。)。所以我想要一个可以设置为背景的可绘制文件。

【问题讨论】:

  • 你能贴一些你试过的代码吗,因为实际上我们可以通过添加drawable和text tpo canvas来将TEXT添加到Drawable
  • 我尝试的是一个 png 格式的图像,就像我在这里粘贴的那样。由于这使应用程序 apk 更大,我正在考虑使用可绘制对象。所以我问我们是否可以向drawables添加文本。
  • 使用两个背景如上图,底部为青色焦点,没有青色焦点和onClick事件中的文本

标签: java android drawable


【解决方案1】:

是的,你可以这样做。

查看帖子 -

How to put text in a drawable ?

基本上,你必须扩展类Drawable并设置画布来绘制文本 到一个drawable。

当您覆盖 draw 方法时,它将获取画布并在定义的位置绘制文本。

Canvas 有很多方法可用。

如图形文档中所述。 -

Canvas 类有它自己的一组你可以使用的绘图方法, 像 drawBitmap(...)、drawRect(...)、drawText(...) 等等。 您可能使用的其他类也有 draw() 方法。为了 例如,你可能会有一些你想要的 Drawable 对象 放在画布上。 Drawable 有自己的 draw() 方法 画布作为参数。

绘图文本将如下所示 -

canvas.drawText("Front Screen Torch", 30, 48, paint);

直接从资源使用中获取实际颜色 -

paint.setColor(getResources().getColor(R.color.black));

请参阅Canvas 了解更多信息。

【讨论】:

    【解决方案2】:

    是的,你可以,而且更多 有了这个对画布的控制,我经常使用这个来完全控制可绘制对象

    public static Drawable getTextDrawable(@ColorInt int iColor) {
     Shape shape = new Shape(){
    
            @Override
            public void draw(Canvas canvas, Paint paint)
            {
                paint.setColor(Color.BLUE);
    
                paint.setTextSize(100);
    
                int radii = dpToPx(3);
    
                canvas.drawText("Hello Canvas", canvas.getWidth() - 150, canvas.getHeight() / 2, paint);
    
                canvas.drawCircle(canvas.getWidth() - radii * 2, canvas.getHeight() /2 - radii, radii, paint);
            }
        };
        shape.getHeight();
    
        Drawable drawable = new ShapeDrawable(shape);
    
        return drawable;
    }
    

    【讨论】:

      【解决方案3】:

      我们可以向可绘制对象添加文本吗?

      不,你不能。

      对此的替代选项是使用文本创建可绘制对象。

      【讨论】:

      • “Alternate option for this is to create a drawable with Text.”是什么意思?
      • 意味着直接有一个带有文本初始化的图像。它将避免编码时间。
      • 当然可以:只需扩展 BitmapDrawable 和。覆盖绘制方法
      • 是的,但它增加了应用程序的大小,因为我必须为每个选项卡使用 2 个图像,这意味着我的可绘制对象中大约有十几个图像。
      • @AkshatJaiswal 不,您不必保留两张图片:请参阅我上面的评论