如何捕获 ViewFlipper 的翻转事件

rlo*_*ezo 1 android listener viewflipper

我有一个自动翻转的 ViewFlipper 组件,我想处理该组件在当前视图和下一个视图之间进行转换的事件。是否可以?

谢谢。

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();
Run Code Online (Sandbox Code Playgroud)

这是日志:

02-16 14:27:50.860: E/AndroidRuntime(7961): 致命异常: main 02-16 14:27:50.860: E/AndroidRuntime(7961): 进程: com.idiadasample, PID: 7961 04:-16 27:50.860: E/AndroidRuntime(7961): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.idiadasample/com.idiada.activity.ViewFlipperActivity}: java.lang.NullPointerException: 尝试调用虚拟方法 'void android .view.animation.Animation.setAnimationListener(android.view.animation.Animation$AnimationListener)' 在一个空对象参考 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): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 02-16 14:27:50.860: E/AndroidRuntime( 7961):在 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): 在 android.os.Handler.dispatchMessage(Handler.java:102) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.os.Looper.loop(Looper. java:135) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.app.ActivityThread.main(ActivityThread.java:5221) 02-16 14:27:50.860: E/AndroidRuntime(7961) : 在 java.lang.reflect.Method.invoke(Native Method) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 java.lang.reflect.Method.invoke(Method.java:372) 02- 16 14:27:50.860: E/AndroidRuntime(7961): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 02-16 14:27:50.860: E/AndroidRuntime(7961) : 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 02-16 14:27:50.860: E/AndroidRuntime(7961): 引起: java.lang.NullPointerException: 尝试调用虚方法 'void android.view.animation.Animation.setAnimationListener(android.view. animation.Animation$AnimationListener)' 在一个空对象引用 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): 在 android.app.Activity.performCreate(Activity.java:5933) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1105) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 02-16 14:27:50.860: E/AndroidRuntime (7961):……还有 10 个引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.view.animation.Animation.setAnimationListener(android.view.animation.Animation$AnimationListener)' 02-16 14:27:50.860 : E/AndroidRuntime(7961): 在 com.idiada.activity.ViewFlipperActivity.onCreate(ViewFlipperActivity.java:89) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.app.Activity.performCreate( Activity.java:5933) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 02-16 14:27:50.860: E/AndroidRuntime 7961): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 02-16 14:27:50.860: E/AndroidRuntime(7961): ... 10 更多引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.view.animation.Animation.setAnimationListener(android.view.animation.Animation$AnimationListener)' 02-16 14:27:50.860 : E/AndroidRuntime(7961): 在 com.idiada.activity.ViewFlipperActivity.onCreate(ViewFlipperActivity.java:89) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.app.Activity.performCreate( Activity.java:5933) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 02-16 14:27:50.860: E/AndroidRuntime 7961): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 02-16 14:27:50.860: E/AndroidRuntime(7961): ... 10 更多Animation.setAnimationListener(android.view.animation.Animation$AnimationListener)' 在一个空对象参考 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): 在 android.app.Activity.performCreate(Activity.java:5933) 02-16 14:27:50.860: E/AndroidRuntime(7961):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 02-16 14 :27:50.860: E/AndroidRuntime(7961): ... 10 多个Animation.setAnimationListener(android.view.animation.Animation$AnimationListener)' 在一个空对象参考 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): 在 android.app.Activity.performCreate(Activity.java:5933) 02-16 14:27:50.860: E/AndroidRuntime(7961):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 02-16 14:27:50.860: E/AndroidRuntime(7961): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 02-16 14 :27:50.860: E/AndroidRuntime(7961): ... 10 多个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 更多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 更多还有 10 个还有 10 个

Mar*_*cus 5

您可以按照此答案中的建议添加动画并收听动画事件:

viewFlipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() {
   public void onAnimationStart(Animation animation) {}
   public void onAnimationRepeat(Animation animation) {}
   public void onAnimationEnd(Animation animation) {}
});
Run Code Online (Sandbox Code Playgroud)

设置动画:

viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
         R.anim.fade_in));
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
         R.anim.fade_out));
Run Code Online (Sandbox Code Playgroud)