如何在画布内的文本周围绘制矩形

Posted

技术标签:

【中文标题】如何在画布内的文本周围绘制矩形【英文标题】:How to draw a rectangle around text inside a canvas 【发布时间】:2016-09-09 00:27:29 【问题描述】:

我正在尝试在文本周围创建一个矩形,该文本是在画布内绘制的。画布内也有一个图像。 这是在图像中绘制文本的代码,但我无法正确获取 Rectangle 的位置。 这是我需要帮助的一行 canvas.drawRect(HELLLLLLLLLLLLPPPPPPPPPPPPPPPP);

> >  public Bitmap drawTextOnBitmap(Context context, int resId, String
> > text)  
> >       //  void drawRect(float left, float top, float right, float bottom, Paint paint)
> >         // prepare canvas
> >         int offset=10;
> >         Resources resources = context.getResources();
> >         float scale = resources.getDisplayMetrics().density;
> >         Bitmap bitmap = BitmapFactory.decodeResource(resources, resId);
> > 
> >         android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
> >         // set default bitmap config if none
> >         if (bitmapConfig == null) 
> >             bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
> >         
> >         // resource bitmaps are immutable, so we need to convert it to mutable one
> >         bitmap = bitmap.copy(bitmapConfig, true);
> >         Canvas canvas = new Canvas(bitmap);
> > 
> >         // new antialiased Paint
> >         TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
> >         // text color - #3D3D3D
> >         paint.setColor(Color.rgb(61, 61, 61));
> >         // text size in pixels
> >         paint.setTextSize((int) (bitmap.getHeight() / 10 * scale));
> >         // text shadow
> >         paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);
> > 
> >         // set text width to canvas width minus 16dp padding
> >         int textWidth = canvas.getWidth() - (int) (16 * scale);
> > 
> >         // init StaticLayout for text
> >         StaticLayout textLayout = new StaticLayout(text, paint, textWidth,
> >                 Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);
> > 
> >         // get height of multiline text
> >         int textHeight = textLayout.getHeight();
> > 
> >         // get position of text's top left corner
> >         float x = (bitmap.getWidth() - textWidth) / 2;
> >         float y = (bitmap.getHeight() - textHeight) / 2;
> >         Paint myPaint = new Paint();
> >         myPaint.setStyle(Paint.Style.STROKE);
> >         myPaint.setColor(Color.rgb(0, 0, 0));
> >         myPaint.setStrokeWidth(10);
> >         // draw text to the Canvas center
> >         canvas.save();
> > 
> > 
> >         canvas.translate(x, y);
> >         textLayout.draw(canvas);
> >         canvas.drawRect(HELLLLLLLLLLLLPPPPPPPPPPPPPPPP);
> >         canvas.restore();
> > 
> > 
> >         //  void drawRect(float left, float top, float right, float bottom, Paint paint)
> > 
> > 
> >         return bitmap;
> >     

这就是我想要实现的目标,我一直坚持在正确的位置创建矩形

【问题讨论】:

@MobileDeveloper 你是机器人吗? 嗯?您必须更具体才能获得好的答案。 @MobileDeveloper 我刚刚添加了更多细节,你现在能看懂了吗? 我的问题是您已经尝试了哪些参数,结果如何?您应该能够测量文本的大小和位置,并确定应该如何绘制矩形。您是否尝试过下面 surya 的建议? 【参考方案1】:

float w = myPaint.measureText(text, 0,text.length();

将其用作宽度和高度,并为您的反应角度提供一些边距

【讨论】:

请看这个,开发者用动画在文字周围制作了Box 虽然github.com/hanks-zyh/HTextView【参考方案2】:

使用paint.setStyle(Paint.Style.STROKE);

随着

Canvas.drawrect();

它将绘制一个空心矩形。

    Paint paint=new Paint();
    paint.setColor(Color.parseColor("#000000"));
    paint.setStyle(Paint.Style.STROKE);

如果你不知道 drawrect() 是如何工作的,请看这篇文章: https://***.com/a/20919124/6265154

【讨论】:

【参考方案3】:

我已经在另一个问题上回答了这个问题 -> Draw text inside a filled rectangle using Canvas Android 希望对你有帮助

【讨论】:

以上是关于如何在画布内的文本周围绘制矩形的主要内容,如果未能解决你的问题,请参考以下文章

Kivy - 在文本周围绘制矩形

在画布上用鼠标绘制矩形与鼠标坐标不同步

如何在 Android Canvas 中绘制带有文本的矩形按钮?

在画布上的图像不透明部分周围绘制边框

如何在python中的感兴趣区域周围绘制一个矩形

如何通过按下和拖动在 Qt Quick/QML 画布中绘制一个矩形