2011年4月4日月曜日

文字の縁取り方法

テキスト文字の縁取り方法を書いておきます。
と言っても、TextViewでの書き方はわかりません。android.text.styleをざっと見たところできそうになかったけど、何か方法があるのかも知れませんね。(これを使うと、エンボス加工とか、横倍率とか部分的に背景色を変えるとかは出来るみたいです)

で、今回は文字の描画(イメージテキスト?)まあ、drawTextでの書き方です。
方法は、setStyleでStyle.STROKE(輪郭線を描く)を使うだけ・・・
縁取りはExcelみたいな感じに縁を中心に膨らんでいく感じなんで中の文字の大きさを変えたくない場合は、
Paint paint = new Paint();
paint.setAntiAlias(true);

paint.setStrokeWidth(2.0f);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
canvas.drawText("テスト", xPos, yPos, paint);

paint.setStrokeWidth(0);
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.FILL);
canvas.drawText("テスト", xPos, yPos, paint);
setStrokeWidthで、縁取り幅を決めて
setColorで、縁取りの色を決めて
setStyle(Paint.Style.STROKE)で、図形の輪郭線のみを描くに設定して
drawTextで、一回文字を書く
setStrokeWidthで、縁取り幅を0に戻して
setColorで、文字色を決めて
setStyle(Paint.Style.FILL)で、図形の内側を塗りつぶすに設定して
drawTextで、もう一度文字を書く

と言う、なんかもったいない処理をしています。
先に内部文字を書けば、縁取り幅を広くすると内部の文字が縁取りに押しつぶされる感じですね。
setStrokeColorというメソッドがあれば、一発で済むのになぁ

もっと、いい方法がありそうだけど初心者の私にはこれしかわかりません。

そうそう、drawTextとかイメージ描画は単位がpx(ピクセル)なんで自動で画面いっぱいに書く場合、解像を考えて書かないとぼやけた文字になっちゃいます。

簡単にpx→dip計算をするなら、
getResources().getDisplayMetrics().densityで、解像度比率(?)を取得して乗算してあげるといいですよ。

0 件のコメント:

コメントを投稿