【AndroidのCanvasに向き合おう】 文字を描こう

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

Canvasに文字を描こう

文字を描画する
void drawText(String text, float x, float y, Paint paint)  座標、Paint、文字列を指定して文字を描画する。
  • String text:表示する文字列を設定する。
  • float x:文字の左端のx座標を設定する。
  • float y:文字の下端のy座標を設定する。
  • Paint paint:色、サイズ、font等を指定する。
void drawText(char[] text, int index, int count, float x, float y, Paint paint) 座標、Paint、文字列を指定して文字を描画する。
  • char[] text:表示する文字列をchar配列で設定する。
  • int index:textの描画開始要素を設定する。
    textの要素数を超える場合や負数を設定するとエラーになります。
  • int count:描画開始要素から描画する個数を設定する。
    indexとcountの和がtextの要素数を超える場合や負数を設定するとエラーになります。
  • float x:文字の左端のx座標を設定する。
  • float y:文字の下端のy座標を設定する。
  • Paint paint:色、サイズ、font等を指定する。
void drawText(String text, int start, int end, float x, float y, Paint paint) 座標、Paint、文字列を指定して文字を描画する。
  • String text:表示する文字列をStringで設定する。
  • int start:textの描画開始要素を設定する。
    textの要素数を超える場合や負数を設定するとエラーになります。
  • int end:textの[end-1]番目を描画終了要素を設定する。
    textの要素数を超える場合や負数、startよりも小さい値を設定するとエラーになります。
  • float x:文字の左端のx座標を設定する。
  • float y:文字の下端のy座標を設定する。
  • Paint paint:色、サイズ、font等を指定する。
void drawText(CharSequence text, int start, int end, float x, float y, Paint paint) 座標、Paint、文字列を指定して文字を描画する。
  • CharSequence text:表示する文字列をCharSequenceで設定する。
  • int start:textの描画開始要素を設定する。
    textの要素数を超える場合や負数を設定するとエラーになります。
  • int end:textの[end-1]番目を描画終了要素を設定する。
    textの要素数を超える場合や負数、startよりも小さい値を設定するとエラーになります。
  • float x:文字の左端のx座標を設定する。
  • float y:文字の下端のy座標を設定する。
  • Paint paint:色、サイズ、font等を指定する。
void drawPosText(String text, float[] pos, Paint paint) 座標、Paint、文字列を指定して文字を描画する。
API level 16で非推奨になりました。
  • String text:表示する文字列をStringで設定する。
  • float[] pos:文字の下端を座標配列を使って設定する。
    String#length*2未満の場合はエラーが発生します。
  • Paint paint:色、サイズ、font等を指定する。
void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) 座標、Paint、char配列を指定して文字を描画する。
API level 16で非推奨になりました。
  • char[] text:表示する文字列をchar配列で設定する。
  • int index:textの描画開始要素を設定する。
    textの要素数を超える場合や負数を設定するとエラーになります。
  • int count:描画開始要素から描画する個数を設定する。
    indexとcountの和がtextの要素数を超える場合や負数を設定するとエラーになります。
  • float[] pos:文字の下端を座標配列を使って設定する。
    count*2未満の場合はエラーが発生します。
  • Paint paint:色、サイズ、font等を指定する。
void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) Path、Paint、文字列を指定して文字を描画する。
描画開始位置はPathの始端からhOffsetの位置になります。
文字の描画時の長さ(hOffsetを含む)がPathの長さを超えてしまうと終端にすべて描画されます。
  • String text:表示する文字列をStringで設定する。
  • Path path:配置する位置をPathで指定する。
  • float hOffset:Pathの始端からの位置を指定する。
  • float vOffset:描画位置をPathに対して上下を指定する。
    正数は上側、負数は下側に描画位置をずらします。
  • Paint paint:色、サイズ、font等を指定する。
void drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint) Path、Paint、char配列を指定して文字を描画する。
描画開始位置はPathの始端からhOffsetの位置になります。
文字の描画時の長さ(hOffsetを含む)がPathの長さを超えてしまうと終端にすべて描画されます。
  • char[] text:表示する文字列をchar配列で設定する。
  • int index:textの描画開始要素を設定する。
    textの要素数を超える場合や負数を設定するとエラーになります。
  • int count:描画開始要素から描画する個数を設定する。
    indexとcountの和がtextの要素数を超える場合や負数を設定するとエラーになります。
  • Path path:配置する位置をPathで指定する。
  • float hOffset:Pathの始端からの位置を指定する。
  • float vOffset:描画位置をPathに対して上下を指定する。
    正数は上側、負数は下側に描画位置をずらします。
  • Paint paint:色、サイズ、font等を指定する。

 

使用例

実際にcanvasを描画してみましょう。
今回も独自Viewを定義しました。

    public class MyCanvasText extends View{

    public MyCanvasText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        char[] drawTextArray = new char[]{'d','r','a','w','T','e','x','t'};
        String drawTextString = "drawText";

        Paint paint = new Paint();
        //文字サイズを50に設定
        paint.setTextSize(50);
        paint.setStrokeWidth(5);
        paint.setColor(Color.BLACK);
        //[x:100,y:100]から描画する。
        canvas.drawText(drawTextString,100,100, paint);

        paint.setColor(Color.GREEN);
        //文字配列の1番目から3個の文字を[x:100,y:300]から描画する。
        canvas.drawText(drawTextArray, 1,3,100,300, paint);

        paint.setColor(Color.BLUE);
        //文字列の1番目から4番目の文字を[x:100,y:500]から描画する。
        canvas.drawText(drawTextString,1,5,100,500,paint);

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(drawTextString).append(drawTextArray);
        paint.setColor(Color.RED);
        //StringBuilderの1番目から4番目の文字を[x:100,y:700]から描画する。
        canvas.drawText(stringBuilder,1,5,100,700,paint);

        float[] pos = new float[]{
                100,800,
                120,820,
                140,840,
                160,860,
                180,880,
                200,900,
                220,920,
                240,940,
        };
        paint.setColor(Color.MAGENTA);
        //文字列の各文字の[x:pos[要素番号*2],pos[y:要素番号*2+1]]に描画する。
        canvas.drawPosText(drawTextString,pos,paint);

        pos = new float[]{
                100,840,
                120,860,
                140,880,
        };
        paint.setColor(Color.CYAN);
        //文字配列の1番目から3個の文字を[x:pos[(要素番号-index)*2],pos[y:(要素番号-index)*2+1]]に描画する。
        canvas.drawPosText(drawTextArray, 1,3, pos, paint);

        //中心座標[x:100,y:1000],半径100,3時の位置から時計周りのPathを定義
        Path path = new Path();
        path.addCircle(100,1000,100,Path.Direction.CW);
        paint.setColor(Color.LTGRAY);
        //文字列の文字をPathの50の位置から、pathの上方向に10の距離に描画する。
        canvas.drawTextOnPath(drawTextString,path,50,10,paint);

        //中心座標[x:100,y:1300],半径100,3時の位置から反時計周りのPathを定義
        path = new Path();
        path.addCircle(100,1300,100,Path.Direction.CCW);
        paint.setColor(Color.LTGRAY);
        //文字列の文字をPathの0の位置から、pathの下方向に50の距離に描画する。
        canvas.drawTextOnPath(drawTextArray,1,3,path,0,-50,paint);
    }
}

Androidゲームプログラミング A to Z

新品価格
¥4,968から
(2017/2/27 22:58時点)


AndroidエンジニアのためのモダンJava

新品価格
¥3,456から
(2017/2/27 23:01時点)


AndroidNDKネイティブプログラミング第2版

中古価格
¥1,893から
(2017/2/28 00:04時点)


Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

新品価格
¥3,024から
(2017/2/28 00:06時点)


Android Studio ではじめる Android プログラミング入門 第3版 Android Studio 2対応

新品価格
¥3,240から
(2017/2/28 00:11時点)


アプリを作ろう! Android入門 Android Studio版 Android5対応

新品価格
¥2,160から
(2017/2/28 00:31時点)


コメントを残す

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

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)