• 検索結果がありません。

第 5 章 グラフィックス 77

5.5 テキスト

5.5.1 テキストの描画の基礎

キャンバスが持っているメソッドのひとつに、

void drawText(String text, float x, float y, Paint paint)

というものがあります。これは、テキストを描画するメソッドです。1個目の引数は描画するテ キスト、2個目と3個目の引数は描画する位置を指定するx座標とy座標です。

5.5.2 テキストの大きさ

描画するテキストの大きさを指定したいときは、

void setTextSize(float textSize)

というメソッドを使って、ペイントに対してテキストの大きさを設定します。

5.5.3 書体

テキストを描画するときに使われる書体(typeface)を指定したいときは、

Typeface setTypeface(Typeface typeface)

というメソッドを使って、ペイントに対して書体を設定します。

このメソッドには、引数として、書体のオブジェクトを渡します。書体のオブジェクトという のは、

android.graphics.Typeface

というクラスのオブジェクトのことです。このクラスでは、次のような書体のオブジェクトが定 数として定義されています。

DEFAULT デフォルトの書体。

SERIF セリフ(ひげ飾りのある書体)。

SANS_SERIF サンセリフ(ひげ飾りのない書体)。

MONOSPACE 横幅が一定の書体。

5.5.4 書体のスタイル

書体のオブジェクトには、デフォルトではノーマルなスタイルが設定されていますが、Typeface クラスが持っている、

static Typeface create(Typeface family, int style)

という静的メソッドを呼び出すことによって、太字またはイタリックが設定された書体を生成す るということも可能です。

5.5. テキスト 87 このメソッドは、1個目の引数として受け取ったオブジェクトによってあらわされている書体 と、2個目の引数として受け取った整数によってあらわされているスタイルを持つ書体のオブジェ クトを生成して、それを戻り値として返します。

スタイルをあらわす整数は、Typefaceクラスで定義されている、次の定数を使って記述します。

NORMAL ノーマルなスタイル。

BOLD 太字。

ITALIC イタリック。

BOLD_ITALIC 太字でかつイタリック。

5.5.5 テキストを描画するアプリケーションの例

それでは、テキストを描画するアプリケーションを作ってみましょう。

次のようなプロジェクトを作成してください。

Project name text

Application name テキストの描画 Package name org.example.text Create Activity TextActivity

次に、TextActivity.javaを次のように書き換えてください。

プログラムの例 TextActivity.java package org.example.text;

import android.app.Activity;

import android.os.Bundle;

import android.content.Context;

import android.view.View;

import android.graphics.Color;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.Typeface;

public class TextActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(new CanvasView(this));

} }

class CanvasView extends View { CanvasView(Context context) {

super(context);

setBackgroundColor(Color.WHITE);

}

@Override

protected void onDraw(Canvas canvas) { Paint paint = new Paint();

paint.setColor(Color.rgb(0, 128, 0));

paint.setTextSize(20);

paint.setTypeface(Typeface.SERIF);

canvas.drawText("SERIF", 50, 50, paint);

paint.setTypeface(Typeface.SANS_SERIF);

canvas.drawText("SANS_SERIF", 50, 80, paint);

paint.setTypeface(Typeface.MONOSPACE);

canvas.drawText("MONOSPACE", 50, 110, paint);

paint.setTypeface(

Typeface.create(Typeface.SERIF, Typeface.BOLD));

canvas.drawText("SERIF BOLD", 50, 140, paint);

paint.setTypeface(

Typeface.create(Typeface.SERIF, Typeface.ITALIC));

canvas.drawText("SERIF ITALIC", 50, 170, paint);

paint.setTypeface(

Typeface.create(Typeface.SERIF, Typeface.BOLD_ITALIC));

canvas.drawText("SERIF BOLD ITALIC", 50, 200, paint);

} }

これで完成です。実行すると、さまざまな書体を持つテキストが描画されるはずです。

5.5.6 パスに沿ったテキスト

drawTextは、水平方向に文字を並べたテキストしか描画できませんが、

void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)

というメソッドを使うことによって、パスに沿ってテキストを描画する、ということも可能です。

このメソッドの1個目の引数は描画するテキスト、2個目の引数はテキストをそれに沿って描画 するパスのオブジェクト、3個目の引数はテキストの描画を開始する位置、4個目の引数はテキ ストとパスとの距離です。

5.5.7 パスに沿ったテキストを描画するアプリケーションの例

それでは、パスに沿ったテキストを描画するアプリケーションを作ってみましょう。

次のようなプロジェクトを作成してください。

Project name textonpath

Application name パスに沿ったテキストの描画 Package name org.example.textonpath Create Activity TextOnPathActivity

次に、TextOnPathActivity.javaを次のように書き換えてください。

プログラムの例 TextOnPathActivity.java package org.example.textonpath;

import android.app.Activity;

import android.os.Bundle;

import android.content.Context;

import android.view.View;

import android.graphics.Color;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.Path;

import android.graphics.Typeface;

public class TextOnPathActivity extends Activity { /** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(new CanvasView(this));

} }

class CanvasView extends View { CanvasView(Context context) {

super(context);

setBackgroundColor(Color.WHITE);

}

@Override

protected void onDraw(Canvas canvas) { Paint paint = new Paint();

paint.setColor(Color.rgb(128, 0, 255));

5.6. ビットマップ画像 89