37

AndroidのMapViewにテキストを描画しようとしています。テキストの描画はうまくいきますが、テキストは白で黒の境界線がないため(都市、州、国を示すためにMapViewsに自然に表示される残りのテキストのように)、テキストを読むのは非常に困難です。黒い枠でテキストを描く方法がわからないようです。誰もがこれを行う方法を知っていますか?

これは私が現在使用している種類のコードです(これは単なるサンプルコードであり、私のオーバーレイの1つにあります):

@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);
}
4

4 に答える 4

68

これを行う最も簡単な方法は、ストロークを使用することです...次のようなものです。

@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ピクセルの境界線が描画され、その上にテキストが描画されて、輪郭のような錯覚が得られます。

また、コンストラクターでペイントを設定してから、それらを再利用することも価値があるかもしれません。

于 2010-01-28T02:52:36.290 に答える
19

このコードの代わりに(最初の回答から)

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

パスで同じものを使用してみてください:

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);

良く見えますか?

于 2011-04-28T10:59:27.960 に答える
11

半分の答えは、十分である場合とそうでない場合があります(私の場合はそうでした)、影を設定することです:

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

影はテキストを目立たせるのに役立ちますが、黒い境界線ほど良くはありません。元の質問をどのように解決するのか、まだ興味があります。

于 2009-11-16T16:16:51.653 に答える
2

これは暗闇の中での完全なショットであり、より良い方法があるかもしれませんが、テキストのコピーを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);
于 2009-11-17T22:08:31.543 に答える