Как Вы рисуете текст с границей на MapView в Android?

Быстрый и простой ответ является №

, JavaScript является настоящим высокоуровневым языком и не имеет доступа к этому виду информации.

33
задан Dan Lew 12 November 2009 в 17:13
поделиться

3 ответа

- 3357787-

Самый простой способ сделать это с инсультом ... что-то подобное:

@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 пикселей вокруг снаружи текста, затем нарисуйте текст над Верхняя часть этого, давая вам иллюзию наброски.

Кроме того, это может стоить установить краски в конструкторе, а затем просто повторно их использовать.

64
ответ дан 27 November 2019 в 17:38
поделиться

Половинный ответ, который может быть или не может быть достаточно хорошим (это было в моем случае), - это установить тень:

textPaint.setShadowLayer(3, 0, 0, Color.BLACK);

Тень помогает тексту сильно выделяться, но не так хорошо, как черная рамка. Мне все еще любопытно, как решить исходный вопрос.

11
ответ дан 27 November 2019 в 17:38
поделиться

Это полный снимок в темноте, и может быть лучший способ, но если вы создадите 4 копии текста, установите их цвет на черный, а затем сместите каждый слой на 1 пиксель по диагонали, это создаст иллюзию границы. Итак, если ваш текст расположен в [100,100], 4 тени нужно будет расположить в точках [99,99], [99,101], [101,99] и [101,101], например:

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);
2
ответ дан 27 November 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: