我已经构建了一个应用程序,可以将带有边框的文本绘制到画布上,然后将其用作位图并放入谷歌地图标记中。
我现在要做的是删除文本边框并在文本后面创建一个纯黑色矩形背景。我尝试了很多东西,但似乎无法在屏幕上显示任何内容。
到目前为止的代码:
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)));
更新
我现在正在尝试。似乎只在文本下面留下一条细细的黑线
//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 mTextBackground = new Paint();
mTextBackground.setColor(Color.BLACK);
mTextBackground.setStyle(Style.FILL);
Rect rectangle = new Rect();
mText.getTextBounds(text, 0, text.length(), rectangle);
//create and draw text and outline onto canvas
Canvas canvas = new Canvas(bmp);
canvas.drawRect(rectangle, mTextBackground);
canvas.drawText(text, 150, 50, mText);
//add text marker to map
textMarker[markerID] = mapView.addMarker(new MarkerOptions()
.title("TEXT_MARKER")
.position(point)
.icon(BitmapDescriptorFactory.fromBitmap(bmp)));
答案 0 :(得分:3)
而不是:
canvas.drawText(text, 150, 50, mTextOutline);
你应该使用Canvas中的一个drawRect函数绘制一个Rectagle。
小心
mTextOutline.setStyle(Paint.Style.STROKE);
表示仅绘制边框(笔触),而
mTextOutline.setStyle(Paint.Style.FILL);
应该填充矩形。
您可以使用Paint.getTextBounds来衡量文字的大小,也可以稍微增加一些,以便有一些边框。
当然,在文本之前绘制边框,否则你会隐藏它。