2011年08月07日

夏休み自由工作:掛け軸っぽい馬鹿ウィジェットを作ってみる

適当に格好いい漢字を掛け軸調にしたらcoolじゃないかなと思った。 なので夏休み自由工作として作ってみた。 自分自身でも何のために使うのか全く分からないが後悔はしていない。 子供の漢字練習にでも使えば良いのではないだろうか。

aji_smartphone_mini.png
こんな感じに漢字を表示する。掛け軸というよりむしろ額縁。
barano_yuutsu.png
設定画面はシンプル。文字列を与えると一文字ずつ表示する。 何も設定しないとランダム表示になる。
kirin_tablet_lcut.png
タブレットで大きく表示。でかい。ちょっと文字にジャギーが出てる。
kirin_tablet_resize.png
Android 3.1以降ならばリサイズできる。

以下、技術的な話。

漢字データ: 漢字データはGlyphWikiからPNG画像で取得する。androidの内部文字コードはUnicodeなので、String#charAtで取得した数値をもとに画像を取ってくる。取得できる画像は200x200なので、拡大するとジャギーが出る。svg形式を使いたいがレンダリングできるライブラリがあったかな?

画像の差し替え: 画像の取得&差し替えを普通に記述するとタイムオーバーするのでAsyncTaskを使う。HTTPコネクションの確立→ビットマップ画像の生成をAsyncTask#doInBackGroundに実装し、画像の差し替えをAsyncTask#onPostExecuteに実装する。あとはウィジェットの更新時にAsyncTaskをキックすればよい。

一定周期の更新: AlarmManagerに次回の更新時刻をセットして、起こしてもらう。持ち越しデータ(ウィジェットの設定や次回以降に表示する文字列)をPendingIntentに格納してAlarmManagerに渡す。

引き伸ばし対策:漢字表示部分は縦横比率を一定に保ちつつ適当にズームしてくれないとまずい。よってscaleType=fitCenterにする。さらにpaddingに適当な数値を入れて隙間を作って額縁らしくする。枠部分はリサイズしても不恰好にならないように、9patch画像にする。

リサイズ(スマフォ向けとタブレット向けの共存): ウィジェットのリサイズはAndroid 3.1(SDK 12)から利用できる。appwidget_providerを設定するXMLにresizeMode="vertical|horizontal"と書く。これではAndroid 3.1以降でしか使えないアプリになるので、ちょっと工夫する。XMLを生成するウィザードで「what kind of resource configuration would you like」と聞かれるので、versionを選んで12と入力する(xml-v12というフォルダが新しく作られるはず)。

良く分からないこと:android3.1向けの設定XMLをxml-v12に置いた状態でBuildTargetをAndroid 2.2にすると、XMLに不正な記述があるとして怒られてしまう。困る。だからといってBuildTargetをAndroid 3.1にすると、エミュレータや実機にアプリケーションをアップロードする際に互換性がないと注意される。どうすればよいというのだろう。

まとめ:スマフォ・タブレットの両対応は色々と奥が深い。

希望があったらor完成したら(SVG読み込みまでやりたいですね)アプリを配布するかも知れないです。欲しい人は連絡ください。善処します。

posted by yuji_at_radiance at 22:58| Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。