Как сделать анимацию слушателем в MonoDroid? - PullRequest
1 голос
/ 29 июля 2011

Я хочу взять этот код 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 (). Кажется, не нужно какой-то интерфейс или что-то.

1 Ответ

4 голосов
/ 03 августа 2011

Ваш исходный код 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 для нас) и вместо неявной ссылки на QuizSplashActivity.this, как это делается в Java, вместо этого нам нужно явно захватить его как поле self.

Это можно упростить, предоставив вспомогательный базовый тип (я полагаю, что в коде Java AnimationListener является вспомогательным типом, так как были предоставлены не все методы Animation.AnimationListener, что делает то же самое в C # будет работать так же).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...