使用Canvas Android在填充矩形内绘制文本

Arj*_*nti 4 android drawing canvas view

如何绘制带有指定边界的填充矩形,并使用Canvas Android绘制该矩形文本?我试过了

mPaint.setColor(Color.GREEN);
canvas.drawText(mText, x, y, mPaint);
mPaint.setColor(Color.BLACK);
canvas.drawRect(x, y, x + w, y + h, mPaint);
Run Code Online (Sandbox Code Playgroud)

但文字不在那个矩形内.任何好友都可以告诉我如何在考虑文本大小的情况下绘制一个围绕指定文本的矩形吗?

Rag*_*dan 13

这里我有硬编码的x和y值.你可以改变它们

        mpaint= new Paint();
        mpaint.setColor(Color.RED);
        mpaint.setStyle(Style.FILL);
        paint2= new Paint();
        paint2.setColor(Color.GREEN);
        paint2.setTextSize(50);  //set text size
        float w = paint2.measureText(s)/2;
        float textSize = paint2.getTextSize();


        @Override
        protected void onDraw(Canvas canvas) {
            paint2.setTextAlign(Paint.Align.CENTER);
            canvas.drawRect(300-w, 300 - textsize, 300 + w, 300, mpaint);
            canvas.drawText(s, 300, 300 ,paint2); //x=300,y=300    
        }
Run Code Online (Sandbox Code Playgroud)

编辑:

它的坏主意,叫measureTextonDraw.你可以在外面做到这一点onDraw.

还有关于性能的视频以及为什么要避免分配onDraw.https://www.youtube.com/watch?v=HAK5acHQ53E

结果快照

在此输入图像描述


Ric*_*cía 6

如果您必须将文本居中放置,您可以使用此代码

    mpaint= new Paint();
    mpaint.setColor(Color.RED);
    mpaint.setStyle(Style.FILL);
    paint2= new Paint();
    paint2.setColor(Color.GREEN);
    paint2.setTextSize(50);  //set text size
    float w = paint2.measureText(s)/2;
    float textSize = paint2.getTextSize();


    @Override
    protected void onDraw(Canvas canvas) {
        paint2.setTextAlign(Paint.Align.CENTER);
        Rect rect = new Rect(300-w, 300 - textsize, 300 + w, 300);
        canvas.drawRect(rect, mpaint);
        canvas.drawText(s, rect.centerX(), rect.centerY() ,paint2); // center text inside rect
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述