2014年7月4日金曜日

【Android】NinePatchの赤い点

Androidにはボタンなどに使う背景画像を
端末サイズに合わせてただ引き伸ばすのではなく,
引き伸ばすところ,引き伸ばさないところ,を
画像に設定することでどの端末で見ても
不自然にならないようにするNinePatchという機能がある.

角丸の画像で角を拡大するとぼやけるが
直線部分だけを拡大するなら問題がない.
伸ばしたい部分と伸ばしたくない部分を設定できるのだ.
人間の長所短所にもNinePatchがあればいいのにね!

このことに関してはAndroid開発者に加え,
アプリアイコンデザイナなども知っておくべき常識となる.
ただし下手に知られていると
NinePatchルールを履き違えたアイコンが送られてきたりするので
そういう場合においては鬱陶しい常識である.

常識的なことなので
こちらに関しては他のサイトにお願いするとして

Android SDK LV19のリソースを眺めてたら
こんなNinePatch画像を見つけた.

NinePatchの最外周には黒(#000000)のみではなかったのか.
しかしAndroidのリソースに赤(#FF0000)が存在するのである.
ちなみにこの画像はEditTextで使われている画像である.
入力欄に用いるあのEditTextである.

端末によってはEditTextの背景が透過されて
レイアウトが黒いと入力した文字が見えなくなってしまう
なんでやねんということから調べ始めたのだが.

なんだろう,この赤いラインは.
と思って調べてみたら
どうやらLayout Boundsという言葉がちらほら見えてきたので
それを更に探っていくと
こちらのページに行き着いた.
凄まじく丁寧に書かれている.
さすがプロという感じだ.
↑「感じ」とか抽象的な単語ばっか使うのがプロとの大きな差なんだよなまず.

全てを把握してもここまで書けない自信しか湧き上がってこない.
要するに,従来のNinePatchでは黒い線でPadding部分を設定できたが,
新しいNinePatchはそれに加え赤い線でMargin部分の設定もできる
ということらしい.
イマイチPaddingとMarginがどちらがどちらか憶えられないうんこ
しかし,残念なことにこの機能が使えるのは
Android4.3(API Lv.18)以降のみである.
これをメインで使えるのはまだ2年は先のことであろう…
その前に地球が滅んでいる可能性も微レ存

と,結局メインのポイントも他のサイト頼りじゃないか!

こういうのがおんぶにだっこというのである,
これがこのエントリの最大のノウハウだ!

余談だが,以前のエントリで
背景画像を繰り返すときにもNinePatchに関して
NinePatchの仕様を流用してパターン繰り返せるんじゃねと思いつき
とソースコードレベルで調べていたのだが
どうやら画像を抽出するあたりは
おいそれとは手も足も出せない場所(Native)だった.
ので,断念した.

うわ,まさかの余談ですら役に立たなかった模様.

赤いNinePatchに関して情報が出回ればいいなということで.
筆を,いやキーボードを叩いた次第である.

2014年7月3日木曜日

【AndEngine】テキストの色変更

AndEngineでテキストを使う場合に注意すべきこと.

// フォントは使いまわすためにメソッドローカルじゃなくクラスフィールドでもっておこう
Font font = FontFactory.create(getFontManager(), getTextureManager(), 256, 256, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32, true, Color.WHITE);
font.load();
// テキストの作成
Text text = new Text(0, 0, font, "aaaaaaaaaaaaaaaaa", getVertexBufferObjectManager());
// 色を指定
text.setColor(Color.RED);
// 表示
attachChild (text);

で赤い文字が表示されるのだが,
上記の通りFontFactory.createメソッドで
フォントをWHITEで取っておく必要がある
後のsetColorメソッドで色を乗せるためである.

このメソッドには引数で色を指定しないものもある.
色を指定せずにフォントを取得すると黒で取れる.
黒に色を乗せても黒のままである.

自前のビットマップフォントなどを使う場合でも同様.
黒いビットマップフォントを作ると色を変更できない.
色を変更したいのであれば白いビットマップフォントを作る必要がある.