2009/08/08

Androidアプリ: 「日本のお天気レーダー」にズーム機能を追加しました

Androidアプリ「日本のお天気レーダー」にズーム機能を追加しました。
「ズーム機能が付いてたらいいのに」というコメントがいくつかあったので、実装してみました。画面にタッチした後の1秒間だけ、ズームボタンが表示されます。また、画像のスクロール位置や、ズームの設定が、アプリ終了時に保存されるようになりました。

Androidのブラウザや地図アプリで使われているのと同じUIを実装してみようと調べてみると、ZoomControlsを使えばいいことが分かりました。
LayoutファイルにZoomControlsを追加して、ズームボタンを押された時のListenerを設定すればOK。例えばこんな感じ。

mZoomControls = (ZoomControls) findViewById(R.id.zoom_controls);
mZoomControls.setOnZoomInClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
zoomIn();
}
});
mZoomControls.setOnZoomOutClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
zoomOut();
}
});

ちょっと手間取ったのは、画像の拡大・縮小の実装でした。調べてみると、ImageView.setImageMatrix()を使えばいいことは分かったのですが、いまいち使い方が分からない。
ドキュメントには実際の使い方がわかるような記述がないし、ネットで調べてみても参考になりそうなコードはなかなか見つからない。結局、Androidのカメラアプリのソースを見てみることに。
postScale()とpostTranslate()を組み合わせて、何とか動くようになったものの、カメラアプリの洗練された実装と比べると、何かいまいちな感じ。Matrixの使い方はもうちょっと勉強する必要がありそう。落ち着いたら、他のお天気アプリにもズーム機能を実装してみよう。

あと、画像の拡大・縮小率もちょっと工夫しました。はじめ、何も考えずに一定間隔のスケールで拡大・縮小させてみたのですが、元画像に細かい模様が含まれているので、中途半端なスケールで拡大・縮小すると、モアレが生じてしまって画質が悪くなってしまいました。そこで、[50%, 75%, 100%, 125%, 150%, 200%, 300%]のステップで変化させるようにしてみました。

次は端末を回転したときに、いちいち画像を再ダウンロードしないようにして高速化してみようかな。
アプリを公開してから約1ヶ月でダウンロード数が5000を越えました。今、日本でAndroid携帯はどれぐらい売れているんでしょうかね。

0 件のコメント:

コメントを投稿