如何在 MonoDroid 中制作动画监听器? [英] How to make an animation listener in MonoDroid?

查看:22
本文介绍了如何在 MonoDroid 中制作动画监听器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想把这个android代码转换成monoDroid

I want to take this android code and convert it to 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(????);

我没有看到 new AnimationListener().好像不想要什么界面什么的.

I don't see new AnimationListener(). It seems ot want some interface or something.

推荐答案

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

Your source Java code is making use of anonymous inner classes:

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

C# 不支持这些(C# 3 匿名类型与 Java 匿名内部类完全不同),因此您需要提供一个显式类型并改用它:

C# doesn't support these (C# 3 anonymous types are in no way similar to Java anonymous inner classes), so you need to provide an explicit type and use that instead:

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 中那样隐式引用 QuizSplashActivity.this,而是需要显式捕获它作为 self 字段.

As seen above, to implement the interface we also inherit from Java.Lang.Object (this implements Android.Runtime.IJavaObject for us), and instead of implicitly referencing QuizSplashActivity.this as is done in Java, we instead need to explicitly capture it as a self field.

这可以通过提供一个辅助基本类型来简化(我想在 Java 代码中 AnimationListener 是一个辅助类型,因为并不是所有的 Animation.AnimationListener 方法都被提供,所以做~同样的东西在 C# 中也可以工作).

This could be simplified by providing a helper base type (I imagine that in the Java code the AnimationListener is a helper type, as not all of the Animation.AnimationListener methods were provided, so doing the ~same thing in C# would work as well).

这篇关于如何在 MonoDroid 中制作动画监听器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆