【Android】AnimationDrawableのイベント検知
AnimationDrawableを使ってImageViewをパラパラアニメにした際に、アニメーションが終わったタイミングを検知する方法です。
(確認環境:Android 4.4.2)
こちらに答えがありました。
Android AnimationDrawable and knowing when animation ends - Stack Overflow
下記のメソッドを用意します。
private void checkIfAnimationDone(AnimationDrawable anim){ final AnimationDrawable a = aim; int timeBetweenChecks = 200; // この値はパラパラアニメの duration と一致させる Handler h = new Handler(); h.postDelayed(new Runnable(){ public void run(){ if (a.getCurrent() != a.getFrame(a.getNumberOfFrames() - 1)){ checkIfAnimationDone(a); } else{ // アニメーションが終わったときの処理... } } }, timeBetweenChecks); }
使い方は以下のようにします。
ImageView anime = (ImageView) layoutView.findViewById(R.id.hoge_image); anime.setBackgroundResource(R.drawable.hoge_animation); AnimationDrawable animeFrame = (AnimationDrawable) anime.getBackground(); animeFrame.start(); checkIfAnimationDone(animeFrame);
上記コード中のhoge_animation.xmlは例えばこのようにします。
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" > <item android:drawable="@drawable/hoge_1" android:duration="200" /> <item android:drawable="@drawable/hoge_2" android:duration="200" /> <item android:drawable="@drawable/hoge_3" android:duration="200" /> </animation-list>
以上です。