android Canvasに文字列を描く(Viewを継承して独自Viewを作成)

TextViewなどのコントロールを配置して文字列を表示する方法のほかに、もっと自由にテキストを表示したいときはcanvasに直接文字列を描画することができます。
タッチイベント等も自分で実装することになりますが、文字を動かしたり自由自在です。

手順は、あらかじめ独自Viewクラスを作成しておき、その独自ビューを表示したい画面(Activity)にセットするような感じです。

まずはViewを継承した独自クラスStringView クラスを作成します。
onDrawメソッドを実装して、一生懸命文字列を描きます!!
第一段階終わり。


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class StringView extends View {

	//コンストラクタ
	public StringView(Context context){
		super(context);
		setBackgroundColor(Color.WHITE);
		setClickable(true);
	}

	//描画
	@Override
	protected void onDraw(Canvas canvas){

		//描画オブジェクトの作成
		Paint paint=new Paint();
		paint.setAntiAlias(true);

		//文字サイズと文字色の指定
		paint.setTextSize(24);
		paint.setColor(Color.rgb(0,0,0));

		//画面サイズの取得
		canvas.drawText("画面サイズ"+
				getWidth()+"x"+getHeight(), 0,60, paint);

		//文字幅の取得
		canvas.drawText("文字幅"+
				(int)paint.ascent(), 0,60*2, paint);

		//アセント・ディセントの取得
		canvas.drawText("アセント:"+(int)paint.ascent(), 0,60*3, paint);

		//24ドット文字列の表示
		paint.setTextSize(24);
		paint.setColor(Color.rgb(255,0,0));
		canvas.drawText("24dot", 0, 60*4, paint);

		//32ドット文字列の表示
		paint.setTextSize(32);
		paint.setColor(Color.rgb(255,0,0));
		canvas.drawText("32dot", 0, 60*5, paint);

		//48ドット文字列の表示
		paint.setTextSize(48);
		paint.setColor(Color.rgb(255,0,0));
		canvas.drawText("48dot", 0, 60*12, paint);

	}
}

次は、表示する画面で setContentViewを使って作成した独自クラスStringViewをセットします。


import android.app.Activity;
import android.os.Bundle;

public class Sansyou extends Activity {
	 @Override
	 public void onCreate(Bundle savedInstanceState) {
	     super.onCreate(savedInstanceState);
	     setContentView( new StringView(this));
	 }
}

20150227_canvas

やさしいジョイントマット つなげるマットで自由にレイアウト

カテゴリー: Android パーマリンク