◆PROCESSING 逆引きリファレンス
カテゴリー:スマホ(AndroidMode)
フォントを扱うには(AndroidMode編)
【解説】
Android Mode を導入する事で、PROCESSINGで開発したプログラムをAndroid端末上で動かす事ができるようになります。
Android Modeの導入については「PROCESSINGをAndroid端末で動かすには(4.0版)」記事を参照してください。
フォントを扱うには loadFont() 命令または createFont() 命令でフォントデータを読み込み、textFont() 命令で利用するフォントを指定します。また textSize() 命令でフォントの表示サイズを変更可能です。
AndroidModeでも、基本的にはJavaModeと同じ命令を使います。
フォントの読み込み
AndroidModeでも vlw 形式のフォントを loadFont() 命令で読み込んで、利用することが可能です。ただしvlw形式のフォントは、非推奨となります。
AndroidModeでは loadFont() 命令ではなく、createFont() 命令を利用するのが良いでしょう。
createFont() 命令では、 TTF または OTF 形式のフォントデータを読み込むことが可能です。
フォントサイズの指定
JavaModeでは、createFont() する際にフォントの大きさを指定しました。また createFont() した後に、textFont() や textSize() 命令でフォントの大きさを指定可能でした。
AndroidModeでもcreateFont() する際にフォントの大きさを指定しますが、フォントの大きさを変更するには、textSize() 命令も合わせて利用する必要があります。
また(AndroidModeのバグだと思うのですが) textFont() 命令でフォントの大きさを指定してはいけません。詳しくは下記注意事項を参照して下さい。
利用するフォントの指定
textFont() 命令で loadFont() や createFont() したフォントデータを使うように指定します。
ただし先にも書きましたが、AndroidModeではtextFont() 命令でフォントの大きさを指定しないでください。
【構文】
PFont font = loadFont( String vlwFileName ) ;
PFont font = createFont( String fileName , float size ) ;
PFont font = createFont( String fileName , float size, boolean smooth ) ;
void textFont( PFont font ) ;
void textSize( float size ) ;
vlwFileName :vlwフォントファイル名
fileName :TTFまたはOTFフォントファイル名
size :フォントサイズ
smooth :True アンチエイリアスする / False しない
【注意】
createFont() や loadFont() に与えるフォントファイルは、PCのスケッチ格納フォルダのdataフォルダ配下に格納しておく必要があります。
このファイルが、スケッチプログラムをコンパイルすると、Android端末のassetsフォルダに置かれて利用されます。
vlw 形式のフォントはAndroid端末での利用にふさわしくないため、loadFont() 命令を利用すると、以下のような警告が表示されます。
「Inefficient font rendering: use createFont() with a TTF/OTF instead of loadFont().」
Android Modeでは loadFont() ではなく、createFont() 命令を利用した方が良いでしょう。
ただしAndroidModeでcreateFont() 命令を利用する際には、以下のような注意があります。
注意1:createFont() 命令で指定するフォントサイズについて
AndroidModeではcreateFont() 命令でフォントの大きさを指定するだけでは、文字の大きさが変わりません。
文字の大きさを変更するには、createFont() した後で textSize() 命令を利用する必要があります。
ただし、createFont() 命令で指定するフォントサイズと、textSize() で指定するフォントサイズは同一の値にしてください。異なる値を指定した場合、場合によっては期待通り表示されない事があります。
例えば以下の2つの例では、表示がおかしくなりました。
NGケース1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
PFont font; void setup(){ //フルスクリーン fullScreen(); //NGパターン1 //フォントを生成して大きさを指定 font = createFont( "SoukouMincho.ttf", 1 ); textSize( 64 ); textFont( font ); //文字の表示位置と色を指定 textAlign( LEFT, TOP ); fill( 0 ); } void draw(){ background( 255 ); text( "装甲騎兵", 0, 0 ); //枠を青色で表示 noFill(); stroke(color(100,100,255)); rect( 0,0,width, 64 ); } |
createFont() でサイズに1を指定し、textSize() で64を指定しています。極端な例ですが、この場合だと以下のような表示になりました。
文字が画面の上端に寄ってしまい、正しく表示されていません。
(フォントデータ:デザインのブログ 様)
NGケース2:
1 2 3 4 5 |
//NGパターン2 //フォントを生成して大きさを指定 font = createFont( "SoukouMincho.ttf", 1 ); textFont( font ); textSize( 64 ); |
NGパターン1の処理から、textFont() と textSize() の順番を入れ替えました。この場合は、文字の上端に妙な余白ができています。
下図を見ていただくとわかるように、青線(64ピクセルの位置に引いた線)から、文字の下端がはみ出ています(汗)。
(フォントデータ:デザインのブログ 様)
注意2:createFont() 命令で指定するフォントサイズは0にしない事
createFont()に与える文字サイズは1以上の数値である必要があります。0を与えると、実行時に以下のような例外が発生します。
「java.lang.IllegalArgumentException: width and height must be > 0」
注意3:textFont() 命令では、フォントの大きさを指定しない事
JavaModeでは textFont() 命令でフォントの大きさを指定可能でした。
AndroidModeでも引数としては指定可能です。ですが、文字の大きさは変わりません(汗)。
そればかりか textFont() でフォントのサイズを指定すると、createFont() や loadFont() したフォントデータが使われなくなってしまう不具合があるようです。
以下の例ではcreateFont() したフォントではなく、標準のフォントが表示されています。
testFont() 命令は、サイズ指定無しで使いましょう。
1 2 3 4 5 |
//NGパターン3 //フォントを生成して大きさを指定 font = createFont( "SoukouMincho.ttf", 64 ); textFont( font, 32 ); textSize( 64 ); |
【関連記事】
サンプルプログラム
フォントを生成して表示する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
PFont font; void setup(){ //フルスクリーン fullScreen(); //フォントを生成して大きさを指定 font = createFont( "SoukouMincho.ttf", 64 ); textFont( font ); //<--サイズは指定しない事! textSize( 64 ); //文字の表示位置と色を指定 textAlign( LEFT, TOP ); fill( 0 ); } void draw(){ background( 255 ); text( "装甲騎兵", 0, 0 ); //枠を青色で表示 noFill(); stroke(color(100,100,255)); rect( 0,0,width, 64 ); } |
フォントデータを生成し、64ピクセルで表示しています。
<出力サンプル>
(フォントデータ:デザインのブログ 様)
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。