如何在Android的MapView上绘制带有边框的文本?

问题描述 投票:33回答:4

我正在尝试在Android的MapView上绘制一些文本。文字的绘制效果很好,但是很难阅读,因为它是白色的,没有黑色边框(就像其余的文字自然出现在MapView上以表示城市,州和国家一样)。我似乎无法弄清楚如何用黑色边框绘制文本。有人知道该怎么做吗?

这是我现在正在使用的那种代码(这只是示例代码,可以在我的一个叠加层中找到:]

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    Paint textPaint = new Paint();
    textPaint.setARGB(255, 255, 255, 255);
    textPaint.setTextAlign(Paint.Align.CENTER);
    textPaint.setTextSize(16);
    textPaint.setTypeface(Typeface.DEFAULT_BOLD);

    canvas.drawText("Some Text", 100, 100, textPaint);

    super.draw(canvas, mapView, shadow);
}
android google-maps android-mapview
4个回答
64
投票
@Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { Paint strokePaint = new Paint(); strokePaint.setARGB(255, 0, 0, 0); strokePaint.setTextAlign(Paint.Align.CENTER); strokePaint.setTextSize(16); strokePaint.setTypeface(Typeface.DEFAULT_BOLD); strokePaint.setStyle(Paint.Style.STROKE); strokePaint.setStrokeWidth(2); Paint textPaint = new Paint(); textPaint.setARGB(255, 255, 255, 255); textPaint.setTextAlign(Paint.Align.CENTER); textPaint.setTextSize(16); textPaint.setTypeface(Typeface.DEFAULT_BOLD); canvas.drawText("Some Text", 100, 100, strokePaint); canvas.drawText("Some Text", 100, 100, textPaint); super.draw(canvas, mapView, shadow); }

这将在文本的外部绘制2个像素的边框,然后在文本的顶部绘制文本,给您轮廓的错觉。

此外,可能值得在构造函数中设置Paints,然后仅重用它们。

18
投票
canvas.drawText("Some Text", 100, 100, strokePaint); canvas.drawText("Some Text", 100, 100, textPaint);

尝试与Path一起使用:

Path path = new Path();
String text = "Some Text";
textPaint.getTextPath(text, 0, text.length(), 0, 100, path);
canvas.drawPath(path, strokePaint);
canvas.drawPath(path, textPaint);

看起来更好吗?


11
投票
textPaint.setShadowLayer(3, 0, 0, Color.BLACK);

阴影有助于使文本突出显示,但不如黑色边框好。我仍然很好奇如何解决原始问题。


2
投票
canvas.drawText("Some Text", 99, 99, borderPaint); canvas.drawText("Some Text", 99, 101, borderPaint); canvas.drawText("Some Text", 101, 99, borderPaint); canvas.drawText("Some Text", 101, 101, borderPaint); canvas.drawText("Some Text", 100, 100, textPaint);
© www.soinside.com 2019 - 2024. All rights reserved.