どのようにあなたは、AndroidでのMapView上の境界線とテキストを描画するのですか?
-
19-09-2019 - |
質問
私は、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つのピクセルずつ層をシフト彼らの色を設定しましたボーダー。あなたのテキストが[100100]に位置しているのであれば、4影は次のように、[99,99]、[99101]、[101,99]および[101101]に位置する必要があります。
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);