Search code examples
androidlistenerviewflipper

How to capture the flip event for ViewFlipper


I've a ViewFlipper component that is flipping automatically, and I want to handle the event in wich the component does a transition between the current View and the next. Is it possible?

Thanks.

mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
mViewFlipper.getAnimation().setAnimationListener(this);
mViewFlipper.startFlipping();

And this is the log:

02-16 14:27:50.860: E/AndroidRuntime(7961): FATAL EXCEPTION: main 02-16 14:27:50.860: E/AndroidRuntime(7961): Process: com.idiadasample, PID: 7961 02-16 14:27:50.860: E/AndroidRuntime(7961): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.idiadasample/com.idiada.activity.ViewFlipperActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.animation.Animation.setAnimationListener(android.view.animation.Animation$AnimationListener)' on a null object reference 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.app.ActivityThread.access$800(ActivityThread.java:144) 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.os.Handler.dispatchMessage(Handler.java:102) 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.os.Looper.loop(Looper.java:135) 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.app.ActivityThread.main(ActivityThread.java:5221) 02-16 14:27:50.860: E/AndroidRuntime(7961): at java.lang.reflect.Method.invoke(Native Method) 02-16 14:27:50.860: E/AndroidRuntime(7961): at java.lang.reflect.Method.invoke(Method.java:372) 02-16 14:27:50.860: E/AndroidRuntime(7961): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 02-16 14:27:50.860: E/AndroidRuntime(7961): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 02-16 14:27:50.860: E/AndroidRuntime(7961): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.animation.Animation.setAnimationListener(android.view.animation.Animation$AnimationListener)' on a null object reference 02-16 14:27:50.860: E/AndroidRuntime(7961): at com.idiada.activity.ViewFlipperActivity.onCreate(ViewFlipperActivity.java:89) 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.app.Activity.performCreate(Activity.java:5933) 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 02-16 14:27:50.860: E/AndroidRuntime(7961): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 02-16 14:27:50.860: E/AndroidRuntime(7961): ... 10 more


Solution

  • You can add animation and listen to animation events as suggested in this answer:

    viewFlipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() {
       public void onAnimationStart(Animation animation) {}
       public void onAnimationRepeat(Animation animation) {}
       public void onAnimationEnd(Animation animation) {}
    });
    

    Set animation:

    viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
             R.anim.fade_in));
    viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
             R.anim.fade_out));