2011-07-29 1 views
1

私は)私は(新しいAnimationListenerが表示されていない、私は今のところMonoDroidでアニメーションリスナーを作成する方法は?

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

これを持って、このアンドロイドコードを取ると、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(); 
    } 
}); 

に変換します。それはいくつかのインターフェイスや何かをしたいようです。

答えて

4

あなたのソースの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)); 

上で見たように、我々はまた、Java.Lang.Objectから継承するインターフェイスを実装するために(これは私たちのためにAndroid.Runtime.IJavaObjectを実装)、そして代わりに暗黙的にを参照しますJavaで行われているように3210を使用する場合は、明示的にそれをselfフィールドとしてキャプチャする必要があります。

これは、ヘルパーベースのタイプを提供することで簡略化できます(JavaコードのAnimationListenerは、Animation.AnimationListenerメソッドのすべてが提供されているわけではないので、C#で〜仕事も同様)。

関連する問題