Android-在画布上绘制纯背景文本,用作位图

Android-在画布上绘制纯背景文本,用作位图,android,android-canvas,android-bitmap,Android,Android Canvas,Android Bitmap,我已经构建了一个应用程序,它可以在画布上绘制带有边框的文本,然后将其用作位图并放入谷歌地图标记中。 我现在想做的是删除文本框,并在文本后面创建一个纯黑色矩形背景。我尝试了一些方法,但似乎无法在屏幕上显示任何东西 迄今为止的代码: String text = "testText"; //create bitmap Bitmap.Config conf = Bitmap.Config.ARGB_8888; Bitmap bmp = Bitmap.c

我已经构建了一个应用程序,它可以在画布上绘制带有边框的文本,然后将其用作位图并放入谷歌地图标记中。
我现在想做的是删除文本框,并在文本后面创建一个纯黑色矩形背景。我尝试了一些方法,但似乎无法在屏幕上显示任何东西

迄今为止的代码:

    String text = "testText";        

    //create bitmap
    Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
    Bitmap bmp = Bitmap.createBitmap(300, 100, conf); 

    //--style text
    //text font
    Typeface tf = Typeface.create("Helvetica", Typeface.BOLD);
    //--set text style, colour, alignment, size
    //text
    Paint mText = new Paint();
    mText.setTextAlign(Align.CENTER);
    mText.setColor(Color.WHITE);
    mText.setStyle(Paint.Style.FILL);
    mText.setTextSize(convertToPixels(context, 12));
    mText.setTypeface(tf);
    mText.setAntiAlias(true);

    //text outline
    Paint mTextOutline = new Paint();
    mTextOutline.setTextAlign(Align.CENTER);
    mTextOutline.setColor(Color.BLACK);
    mTextOutline.setStyle(Paint.Style.STROKE);
    mTextOutline.setTextSize(convertToPixels(context, 12));
    mTextOutline.setTypeface(tf);
    mTextOutline.setAntiAlias(true);
    mTextOutline.setStrokeWidth(2);

    //create and draw text and outline onto canvas
    Canvas canvas = new Canvas(bmp);
    canvas.drawText(text, 150, 50, mText);
    canvas.drawText(text, 150, 50, mTextOutline);

    //add text marker to map
    textMarker[markerID] = mapView.addMarker(new MarkerOptions()
        .title("TEXT_MARKER")
        .position(point)
        .icon(BitmapDescriptorFactory.fromBitmap(bmp)));
更新:


我现在正在尝试的。似乎只在文本下方返回一条细黑线。

与此相反:

canvas.drawText(text, 150, 50, mTextOutline);
您应该使用画布中的函数之一绘制矩形

当心

mTextOutline.setStyle(Paint.Style.STROKE);
表示仅绘制边框(笔划),而

应该填充矩形

您可以通过使用来测量文本的大小,也许可以稍微增加它,这样您就有了一些边框


当然,在文本之前绘制边框,否则会将其隐藏。

谢谢,这非常有用。我正在努力把矩形画成文本大小
mTextOutline.setStyle(Paint.Style.STROKE);
mTextOutline.setStyle(Paint.Style.FILL);