【Android】SurfaceView上でCanvasに描画する文字列の幅を取得する

SurfaceView上でCanvasに描画する前に文字列の幅を取得する方法。
取得するにはPaintクラスのmeasureText()メソッドを利用する。

【SampleSurfaceView.java】

public class SampleSurfaceView11 extends SurfaceView implements SurfaceHolder.Callback{
	
    // 描画用
	Paint paint = null;
    
    String put_txt = "文字列の横幅を取得";
    
	public SampleSurfaceView11(Context context) {
		super(context);
		
		getHolder().addCallback(this);
		paint = new Paint();
	}
	
	public void surfaceCreated(SurfaceHolder holder) {
		
		Canvas canvas = holder.lockCanvas();
		canvas.drawColor(Color.BLACK);
		paint.setColor(Color.WHITE);
		paint.setTextSize(30);
		
		// テキストの幅を取得する
		float testWidth = paint.measureText(put_txt);
		
		canvas.drawText(put_txt, 0, paint.getTextSize(), paint);
		canvas.drawText("テキスト幅は" + testWidth + "px です", 0, paint.getTextSize()*3, paint);
		
		holder.unlockCanvasAndPost(canvas);
	}
	
	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

	}
    
	public void surfaceDestroyed(SurfaceHolder holder) {

	}
}

【Activity000.java】

public class Activity000 extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// アクティビティにビューを追加する
		setContentView(new SampleSurfaceView(this));
	}
}

【出力結果】
Canvasに描画する文字幅を取得

measureText()メソッドで文字列(テキスト)の幅を取得できる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>