gpt4 book ai didi

c# - gles2 动态壁纸转换为 c# (xamarin) 符合错误“...mono.android.TypeManager cannot be applied to

转载 作者:行者123 更新时间:2023-11-30 03:46:30 24 4
gpt4 key购买 nike

我正在尝试使用 c# 中的 xamarin 编写一个 android 动态壁纸。
为此,我将此处找到的 GLWallPaperService 代码转换为 c#:
http://www.learnopengles.com/how-to-use-opengl-es-2-in-an-android-live-wallpaper/

(这里直接跳转到java实现:https://github.com/learnopengles/Learn-OpenGLES-Tutorials/tree/master/android/AndroidOpenGLESLessons/src/com/learnopengles/android/livewallpaper)

编译后报错:

Activate(java.lang.String,java.lang.String,java.lang.Object,java.lang.Object[]) in mono.android.TypeManager cannot be applied to (java.lang.String,java.lang.String,com.[redacted].OpenGLES2WallpaperService.OpenGLES2WallpaperService_OpenGLES2Engine,java.lang.Object[]) mono.android.TypeManager.Activate ("com.[redacted].OpenGLES2WallpaperService/OpenGLES2Engine, GameUtilClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "com.[redacted].WallpaperServiceUtil.OpenGLES2WallpaperService, GameUtilClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", this, new java.lang.Object[] { OpenGLES2WallpaperService.this }); D:\[redacted]\obj\Debug\android\src\com\[redacted] \wallpaperserviceutil\OpenGLES2WallpaperService.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 Callable Wrapper 生成器代码中的一个错误:我们没有正确支持来自 C# 的“中间”非静态内部类。具体来说,GLWallpaperService.Engine 生成正确,但 OpenGLES2WallpaperService.OpenGLES2Engine 不是。

请在 bugzilla.xamarin.com 提交错误.

关于c# - gles2 动态壁纸转换为 c# (xamarin) 符合错误“...mono.android.TypeManager cannot be applied to,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14914754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com