最近、「有山さんはもうMakersの方に行っちゃったんだね。Androidはもうやってないんだよね」「いやいや、もちろんやってますよ。Android」と言う会話があったので。

Android SDKに同梱されている”Draw 9-patch Tool“を、SWTをベースにリライトして、Eclipseのプラグインにしたので公開します。

このプラグインを使えば、開発者は、Eclipseの中だけで9-patch画像の作成や編集が出来ます。

Screen Shot 2013-02-10 at 3.43.04 PM

これまでは、Facebook/Twitter/Google+で、知り合い向けに公開していたのですが、もう少し公開範囲を広げることにしました。

開発してまだ日が浅いので、Windows/Mac/Linuxの違い、Eclipseのバージョンの違いなどによって、不具合がある可能性があります。
不具合を見つけた方は、是非ともフィードバックしてください。

フィードバックは、Facebook/Twitter/Google+、その他どんな手段でも構いません。宜しくお願いいたします。

ダウンロード&利用方法

draw9patch tool for Eclipse plugin (MD5: 09b952ceea11d9d59984ad5d004b422d)

https://github.com/keiji/draw9patch2/blob/master/bin/Draw9PatchPlugin.zip

zipを展開して、pluginsの中の”Draw9PatchEditor_*.jar”を、お使いのEclipseのpluginsディレクトリにコピーして下さい(Eclipseの再起動が必要です)。

Eclipseの再起動後、パッケージエクスプローラーから、pngファイル(e.g. “res/drawable-hdpi/ic_launcher.png”)をダブルクリックすると、”Draw 9-patch Tool”が起動します。

Screen Shot 2013-02-10 at 4.00.32 PM
この画像中のモザイクは、
Pixelmatorで処理しました。

9-patchとは?

皆さんご存じの通り、Androidは、様々な解像度の端末にアプリを配信することになります。したがって、アプリで表示する画像は、解像度を決めうちで作ることは推奨されていません(参考: Android Developers: Draw 9-patch)

しかし、小さな画像を拡大して表示するときに、全体を引き延ばすと、画像自体がぼやけてしまいます。

Screen Shot 2013-02-10 at 3.53.34 PM

そのため、引き延ばす範囲をあらかじめ設定しておくと、Androidは、指定した範囲を引き延ばして表示します。

この、引き延ばす範囲を指定する作業を「パッチを当てる」と、言い、”Draw 9-patch Tool”はそのためにあります。

Screen Shot 2013-02-10 at 3.47.17 PM

また、画像の上に文字を表示する場合など、どの部分に文字を載せたいのか(パディング)を設定することも出来ます(右側青色部分)。

パッチとパディングは、画像の一番外側に黒いドットを置いて設定します。

パッチをパディングを設定したファイルは、実体はpng画像のデータです。拡張子を”.9.png”とすることで、Androidは、その画像が”9-patched”であると認識します。

現在のDraw 9-patch Tool

現在、Android SDKに同梱のDraw 9-patchツールは、スタンドアローンのアプリケーションとして動作します。

Screen Shot 2013-02-10 at 3.48.51 PM

AWT&Swingベースで開発されており、現在のEclipseプラグイン”ADT(Android Development Tools)”には取り込まれていません。そのため、開発者は、Eclipseだけで作業を完結することが出来ませんでした。

また、このツールには、いくつかの不具合が報告されていますが、Android登場から6年間、ほとんど改善されていません。

Screen Shot 2013-02-10 at 3.34.01 PM
不具合の1つ。
画像の読み込み直後に中央に表示されない

僕もいくつか不具合修正のパッチを作成して、AOSP(Android Open Source Project)にサブミットしたことがあります。

しかし、現在の設計は、クラスの分割が十分でなく、またテストケースが用意されていないために大きな変更に踏み切れず。根本的な解決には至りませんでした。

Google I/Oで、開発ツールの担当であるTor Norbyeと、Xavier Ducrohetに会ったときに、”Draw 9-patch toolは誰がメンテナンスしているの?“と、聞いたことがあります。

その答えは、”Nobody knows…“でした。

新しいDraw 9-patch Tool

今回、新しい”Draw 9-patch Tool”は、SWT(Standard Widget Toolkit)ベースで開発しています。

Screen Shot 2013-02-10 at 3.43.54 PM

これまで と同様、スタンドアローンで動作するのに加えて、SWTベースなので、Eclipseのプラグインにも比較的容易に移植できました。

Screen Shot 2013-02-10 at 4.00.32 PM (1)
この画像中のモザイクは、
Pixelmatorで処理しました。

プラグイン化することで、開発者は、Eclipseの中だけでパッチやパディングを設定した画像の作成や編集をすることが出来ます。

現在の”Draw 9-patch Tool”の不具合は、知りうる限り、全て修正してあります。

また、クラス分割の徹底と、JUnitのテストケースを用意することで、コード変更への強度を高めました。

新しいDraw 9-patchのコードは、現在、AOSPへサブミットしてレビュー待ちの状態です。これがもしAOSPに取り込まれれば、正式なAndroid開発ツールとして、開発者の皆さんのお手元に届くかもしれません。

しかし、繰り返しになりますが、開発してまだ日が浅いツールなので、Windows/Mac/Linuxの違い、Eclipseのバージョンの違いなどによって、不具合がある可能性があります。

不具合を見つけた方は、是非ともフィードバックしてください。

フィードバックは、Facebook/Twitter/Google+、その他どんな手段でも構いません。宜しくお願いいたします。