gles2实时墙纸转换为c#(xamarin)符合错误“;。。。mono.android.TypeManager无法应用于
我正在尝试用c#中的xamarin编写android live墙纸。gles2实时墙纸转换为c#(xamarin)符合错误“;。。。mono.android.TypeManager无法应用于,c#,android,opengl-es,live-wallpaper,xamarin,C#,Android,Opengl Es,Live Wallpaper,Xamarin,我正在尝试用c#中的xamarin编写android live墙纸。 为此,我将这里找到的服务代码转换为c: (此处直接跳到java实现:) 编译后,我得到错误: mono.android.TypeManager中的Activate(java.lang.String、java.lang.String、java.lang.Object、java.lang.Object[])不能应用于(java.lang.String、java.lang.String、com.[redacted].OpenGl
为此,我将这里找到的服务代码转换为c:
(此处直接跳到java实现:)
编译后,我得到错误: mono.android.TypeManager中的Activate(java.lang.String、java.lang.String、java.lang.Object、java.lang.Object[])不能应用于(java.lang.String、java.lang.String、com.[redacted].OpenGles2WallperService.OpenGles2WallperService_OpenGLES2Engine、java.lang.Object[])mono.android.TypeManager.Activate(“com.[redacted].opengles2wallperservice/OpenGLES2Engine,GameUtilClassLibrary,Version=1.0.0,Culture=neutral,PublicKeyToken=null,“com.[redacted].wallperserviceutil.opengles2wallperservice,GameUtilClassLibrary,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”,这是新的java.lang.Object[]{opengles2wallpersservice.this});D:\[redacted]\obj\Debug\android\src\com\[redacted]\wallperviceutil\opengles2wallperservice.java
这是我的c#实现。。。抱歉,篇幅太长:
public abstract class GLWallpaperService : WallpaperService
{
public class GLEngine : Engine
{
private readonly GLWallpaperService outerInstance;
public GLEngine(GLWallpaperService outerInstance) : base(outerInstance)
{
this.outerInstance = outerInstance;
}
internal class WallpaperGLSurfaceView : GLSurfaceView
{
private readonly GLWallpaperService.GLEngine outerInstance;
ISurfaceHolder _surfaceHolder;
internal WallpaperGLSurfaceView(GLWallpaperService.GLEngine outerInstance, Context context, ISurfaceHolder surfaceHolder)
: base(context)
{
this.outerInstance = outerInstance;
_surfaceHolder = surfaceHolder;
}
public override ISurfaceHolder Holder
{
get
{
return _surfaceHolder;
}
}
public virtual void OnDestroy()
{
base.OnDetachedFromWindow();
}
}
private WallpaperGLSurfaceView glSurfaceView;
private bool rendererHasBeenSet;
public override void OnCreate(ISurfaceHolder surfaceHolder)
{
base.OnCreate(surfaceHolder);
glSurfaceView = new WallpaperGLSurfaceView(this, outerInstance, surfaceHolder);
}
public override void OnVisibilityChanged(bool visible)
{
base.OnVisibilityChanged(visible);
if (rendererHasBeenSet)
{
if (visible)
{
glSurfaceView.OnResume();
}
else
{
if (!IsPreview)
{
glSurfaceView.OnPause();
}
}
}
}
public override void OnDestroy()
{
base.OnDestroy();
glSurfaceView.OnDestroy();
}
protected internal virtual Android.Opengl.GLSurfaceView.IRenderer NewRenderer//was just Renderer
{
set
{
glSurfaceView.SetRenderer(value);
rendererHasBeenSet = true;
}
}
protected internal virtual int EGLContextClientVersion
{
set
{
glSurfaceView.SetEGLContextClientVersion(value);
}
}
}
}
public abstract class OpenGLES2WallpaperService : GLWallpaperService
{
public override Engine OnCreateEngine()
{
return new OpenGLES2Engine(this);
}
internal class OpenGLES2Engine : GLWallpaperService.GLEngine
{
private readonly OpenGLES2WallpaperService outerInstance;
public OpenGLES2Engine(OpenGLES2WallpaperService outerInstance)
: base(outerInstance)
{
this.outerInstance = outerInstance;
}
public override void OnCreate(ISurfaceHolder surfaceHolder)
{
base.OnCreate(surfaceHolder);
// Check if the system supports OpenGL ES 2.0.
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final android.app.ActivityManager activityManager = (android.app.ActivityManager) getSystemService(android.content.Context.ACTIVITY_SERVICE);
ActivityManager activityManager = (ActivityManager)outerInstance.GetSystemService(Context.ActivityService);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final android.content.pm.ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
ConfigurationInfo configurationInfo = activityManager.DeviceConfigurationInfo;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
bool supportsEs2 = configurationInfo.ReqGlEsVersion >= 0x20000;
if (supportsEs2)
{
// Request an OpenGL ES 2.0 compatible context.
EGLContextClientVersion = 2;
// Set the renderer to our user-defined renderer.
NewRenderer = outerInstance.NewRenderer;//was just Renderer
}
else
{
// This is where you could create an OpenGL ES 1.x compatible
// renderer if you wanted to support both ES 1 and ES 2.
return;
}
}
}
internal abstract Android.Opengl.GLSurfaceView.IRenderer NewRenderer { get; }
}
public class LessonThreeWallpaperService : OpenGLES2WallpaperService
{
internal override Android.Opengl.GLSurfaceView.IRenderer NewRenderer
{
get
{
return new LessonThreeRenderer(); // is a GLSurfaceView.IRenderer
}
}
}
我的目标是sdk版本8,并使用Visual Studio 2012。
非常感谢您的帮助。这是我们的Android可调用包装器生成器代码中的一个错误:我们不能正确地支持C#中的“中间”非静态内部类。具体来说,
glwallperservice.Engine
正确生成,但opengles2wallperservice.OpenGLES2Engine
不正确
请在提交一个bug。这是我们的Android可调用包装生成器代码中的一个bug:我们不正确地支持C#中的“中间”非静态内部类。具体来说,
glwallperservice.Engine
正确生成,但opengles2wallperservice.OpenGLES2Engine
不正确
请在上提交一个bug