Androidで定期アニメーションさせる方法

2012-12-29

Androidも再び触ってみようと久しぶりにEclipseを立ち上げると、Xcode4.3にバージョンアップした時に/Applicationディレクトリが削除されてしまったようで、その中に入れていたAndroidのSDKも勝手に消えていて動かなくなっていた。なにそれ…。 なので再インストール。

Androidでゲームを作る前段階として、一定時間ごとに画面を更新する方法を知りたい。どう書くのが一般的なのか、パッとググったところよくわからなかった。いくつか見かけた中では、Timerを使う方法とThreadを使う方法があるらしい。

Timerを使う方法は簡単:

int fps = 60;
final Handler handler = new Handler();
final Runnable requestRedraw = new Runnable() {
@Override public void run() { invalidate(); }
};
Timer timer = new Timer(false);
timer.schedule(new TimerTask() {
// 状態を更新する
handler.post(requestRedraw);
}, 0, 1000 / fps);

invalidate()を呼び出すことで画面の更新が要求され、最終的に実際の秒メソッドonDraw()が呼び出されることになるけど、invalidate()はUIスレッドからしか呼び出せないのでHandlerpost()するという方法を取る。

タイマの精度とか処理落ちしたらどうなるかとかは調べてない。