如何在MonoDroid中制作动画监听器?

我想把这个Android代码转换为monoDroid

Animation fade2 = AnimationUtils.loadAnimation(this, R.anim.fade_in2); fade2.setAnimationListener(new AnimationListener() { public void onAnimationEnd(Animation animation) { startActivity(new Intent(QuizSplashActivity.this, QuizMenuActivity.class)); QuizSplashActivity.this.finish(); } }); 

到目前为止我有这个

 Animation fade2 = AnimationUtils.LoadAnimation(this, Resource.Animation.Fade_in2); fade2.SetAnimationListener(????); 

我没有看到新的AnimationListener()。 它似乎不需要一些界面或东西。

您的源代码Java代码正在使用匿名内部类:

 fade2.setAnimationListener(new AnimationListener() {...}); 

C#不支持这些(C#3匿名类型与Java匿名内部类没有任何关系),因此您需要提供一个显式类型并使用它:

 class MyAnimationListener : Java.Lang.Object, Android.Views.Animations.Animation.IAnimationListener { Activity self; public MyAnimation (Activity self) { this.self = self; } public void OnAnimationEnd (Animation animation) { self.StartActivity (new Intent (self, typeof (QuizMenuActivity))); self.Finish (); } public void OnAnimationRepeat (Animation animation) { } public void OnAnimationStart (Animation animation) { } } // ... fade2.SetAnimationListener (new MyAnimationListener (this)); 

如上所示,为了实现接口,我们还inheritance了Java.Lang.Object (这为我们实现了Android.Runtime.IJavaObject ),而不是像在Java中那样隐式引用QuizSplashActivity.this ,而是需要显式捕获它作为一个self领域。

这可以通过提供一个帮助程序基类型来简化(我想在Java代码中, AnimationListener是一个帮助程序类型,因为并非所有的Animation.AnimationListener方法都提供了,所以在C#中执行相同的操作也可以) 。