문제

Android의 MapView에 텍스트를 그려 보려고합니다. 텍스트의 그림은 괜찮지 만 검은 테두리가없는 흰색이기 때문에 텍스트를 읽는 것은 매우 어렵습니다 (도시, 주 및 국가를 표시하기 위해 MapViews에 자연스럽게 나타나는 텍스트의 나머지 부분과 같이). 검은 테두리로 텍스트를 그리는 방법을 알아낼 수없는 것 같습니다. 누구 든지이 작업을 수행하는 방법을 알고 있습니까?

이것은 내가 지금 사용하고있는 일종의 코드입니다 (이것은 오버레이 중 하나에서 발견되는 예제 코드입니다) :

@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);
}
도움이 되었습니까?

해결책

이 작업을 수행하는 가장 쉬운 방법은 뇌졸중입니다 ... 이와 같은 것 :

@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 픽셀의 경계를 그립니다. 텍스트 상단 위에 텍스트를 그려 개요의 환상을줍니다.

또한 생성자에 페인트를 설정 한 다음 재사용하는 것이 좋습니다.

다른 팁

이 코드 대신 (첫 번째 답변에서)

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

경로와 함께 동일하게 사용하십시오.

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

더 좋아 보이나요?

충분하거나 충분하지 않을 수도있는 반군은 (내 경우에) 그림자를 설정하는 것입니다.

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

그림자는 텍스트가 많이 눈에 띄는 데 도움이되지만 검은 테두리만큼 좋지는 않습니다. 원래 질문을 해결하는 방법이 여전히 궁금합니다.

이것은 어둠 속에서 완전한 샷이며 더 나은 방법이있을 수 있지만, 텍스트의 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top