2011年6月22日水曜日

android widget設定画面で Ajax load みたいなぐるぐるを実現

今日は超軽め

前回のリリースで、widget を貼りつける際に必要な設定を
IMAP で取得するという機能を入れました。

この時に困ったのが「service の context では progressDialog を
立ち上げられない」という問題。

widget の設定画面は Activity を使って作成する。

でも、getApplicationContext で取得できる context は
通常の Activity で取得できるものと違うらしく、service の
context では progressDialog は出せませんよー的なエラーが発生してしまう。


そこで、画面に Ajax load 的なぐるぐるを出したいなぁと思ったわけです。


でも、Android はアニメgifが苦手。

試しに作って貼ってみましたが、ピクリとも動きません。

ブラウザエンジン経由で無理やり動かす方法もあるようですが、
ここはシンプルに Android がそれ用に提供している機能を使いました。


アニメーションを Android API では定義できます。

resディレクトリに Android XML File を追加すると、「What type of resource
would you like to create?」のカテゴリに Animation という選択肢が
ありますので、これを選んで作成します。

自分の場合は回転させたかったので以下のように記述しました。


<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatMode="restart"
android:repeatCount="-1"
>
</rotate>

これだと画像の中央を中心に0.5秒に一回転するという感じです。
いつまでも回り続けます。

後はこの定義を ImageView に設定してやるだけ


ImageView limg = (ImageView)findViewById(R.id.loading_image);
Animation anime = AnimationUtils.loadAnimation(this.getApplicationContext(), R.anim.loading);
limg.setAnimation(anime);


これで、それなりな画像を用意してやれば完成です。
簡単でしょ?


ちなみに、Animation は rotate の他にも
・alpha
・scale
・set
・translate

なんて種類があるみたい。


この辺と surfaceView を使えば、flash とまではいかなくても
結構な視覚効果を実現できるかも~~~

0 件のコメント:

コメントを投稿