5-5 文字列の描画 (1)基本的な文字列描画 A.手順 5-5 文字列の描画 (1)基本的な文字列描画 A.手順 通常の図形と同様、ペンオブジェクトを生成・設定し、 drawText メソッドで描画する。 ペンオブジェクトで、文字サイズ(setTextSize)を設定したり、 文字幅を測る(measureText)ことができる。
B. 関連するクラス 【Paint クラス】 void setAntialias(boolean a) 文字やラインを滑らかに見せる処理を行うどうかを a で指定する。 void setTextSize(float s) 文字サイズ(s)の指定 void setColor(int c) 文字色(c)の指定 float measureText(String text) 文字列の幅 float ascent() ベースラインより上の高さ float decent() ベースラインより下の高さ 【Color クラス】 static int rgb RGBによる色の指定 (int r,int g, int b) r:赤、g:緑、b:青 static int argb 透明度とRGBによる色の指定 (int a,int r,int g, int b) a:透明度、r:赤、g:緑、b:青 【View クラス】 int getWidth() 画面の幅 int getHeight() 画面の高さ
C. プログラム例(1) package jp.eclipse.string; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; public class StringActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new StringView(this)); } class StringView extends View{ public StringView(Context context) { super(context); C. プログラム例(1)
プログラム例(2) protected void onDraw(Canvas c){ setBackgroundColor(Color.WHITE); // 描画オブジェクト生成 Paint p=new Paint(); p.setAntiAlias(true); // 文字サイズと文字色 p.setTextSize(20); p.setColor(Color.rgb(255, 0, 0)); // 画面サイズ c.drawText("画面サイズ : "+getWidth()+"×"+getWidth(), 0, 50, p); // 文字幅 c.drawText("文字幅 : "+(int)p.measureText("A"),0, 50*2, p); // アセント・ディセント c.drawText("アセント : "+(int)p.ascent(),0, 50*3, p); c.drawText("ディセント : "+(int)p.descent(),0, 50*4, p); // 文字サイズ12 p.setTextSize(12); p.setColor(Color.rgb(0, 128, 0)); c.drawText("12ドット文字", 0, 50*5, p); // 文字サイズ24 p.setTextSize(24); p.setColor(Color.rgb(0, 0, 255)); c.drawText("24ドット文字", 0, 50*6, p); }
D. 実行例 指定した文字列が描画されている。 (Java 1.6で動かすこと)
(1)文字列の回転 A.手順 図形の回転と同じようにキャンバスの座標軸を回転する。
B. 関連するクラス 【Paint クラス】 void setAntialias(boolean a) 文字やラインを滑らかに見せる処理を行うどうかを a で指定する。 void setTextSize(float s) 文字サイズ(s)の指定 void setColor(int c) 文字色(c)の指定 float measureText(String text) 文字列の幅 float ascent() ベースラインより上の高さ float decent() ベースラインより下の高さ 【Color クラス】 static int rgb RGBによる色の指定 (int r,int g, int b) r:赤、g:緑、b:青 static int argb 透明度とRGBによる色の指定 (int a,int r,int g, int b) a:透明度、r:赤、g:緑、b:青 【View クラス】 int getWidth() 画面の幅 int getHeight() 画面の高さ
B. プログラム例(1) package jp.eclipse.StrRot; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; public class StrRotActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new StringView(this)); }
プログラム例(2) class StringView extends View{ public StringView(Context context) { super(context); } protected void onDraw(Canvas c){ super.onDraw(c); setBackgroundColor(Color.WHITE); int w = c.getWidth();int h = c.getHeight(); int wd = w / 2; int hd = h / 2; Paint p=new Paint(); p.setAntiAlias(true); p.setTextSize(20); p.setColor(Color.rgb(0, 0, 255)); c.translate(wd, hd); for(int i = 0; i < 8; i++){ c.rotate(45f); c.drawText(" 文字列の回転", 0, 0, p);
D. 実行例 回転した文字列が表示されている。 なお、文字列の先頭は重ならないよう 全角の空白にしてある。 (Java 1.6で動かすこと)