Java Android OpenGL ES 2.0 Live墙纸-GLSurface方法不调用
我将学习下一个教程(第一部分),但类结构略为简单Java Android OpenGL ES 2.0 Live墙纸-GLSurface方法不调用,java,android,opengl-es,Java,Android,Opengl Es,我将学习下一个教程(第一部分),但类结构略为简单 当我尝试选择墙纸(预览)时,我会看到下一个事件链 onCreateEngine()->onCreate()->onResume()->onPause()->onResume()->onPause() 为什么我得到了两次onResume()->onPause() 当我点击“设置墙纸”时,我会得到额外的onPause()->onResume(),并且实时墙纸崩溃(很可能是因为onPause()调用了2次) 此外,在预览或设置壁纸时,我也没有看到像o
当我尝试选择墙纸(预览)时,我会看到下一个事件链 onCreateEngine()->onCreate()->onResume()->onPause()->onResume()->onPause()
为什么我得到了两次onResume()->onPause() 当我点击“设置墙纸”时,我会得到额外的onPause()->onResume(),并且实时墙纸崩溃(很可能是因为onPause()调用了2次) 此外,在预览或设置壁纸时,我也没有看到像onSurfaceCreated()、onDrawFrame()这样的OGLES2Renderer调用 我错过了什么 Android清单(部分) OGLES2Renderer.java
public class LW extends WallpaperService
{
public class OGLES2Engine extends Engine
{
private class OGLES2SV extends GLSurfaceView
{
public OGLES2SV(Context context)
{
super(context);
}
public void onDestroy()
{
super.onDetachedFromWindow();
}
}
private OGLES2SV SV = null;
@Override
public void onCreate(SurfaceHolder surfaceHolder)
{
super.onCreate(surfaceHolder);
SV = new OGLES2SV(LW.this);
SV.setEGLContextClientVersion(2);
SV.setRenderer(new OGLES2Renderer());
}
@Override
public void onVisibilityChanged(boolean visible)
{
if (!visible)
SV.onResume();
else
SV.onPause();
super.onVisibilityChanged(visible);
}
@Override
public void onDestroy()
{
SV.onDestroy();
super.onDestroy();
}
}
@Override
public Engine onCreateEngine()
{
return new OGLES2Engine();
}
}
public class OGLES2Renderer implements GLSurfaceView.Renderer
{
private static final String LOG_TAG = "GL2Surface";
@Override
public void onDrawFrame(GL10 unused)
{
Log.i(LOG_TAG, "Draw frame");
}
@Override
public void onSurfaceChanged(GL10 unused, int width, int height)
{
Log.i(LOG_TAG, "Surface changed");
}
@Override
public void onSurfaceCreated(GL10 unused_, EGLConfig _unused)
{
Log.i(LOG_TAG, "Surface created");
}
}
您可以使用Wallpaper extension
来实现这一点
public class LW extends WallpaperService
{
public class OGLES2Engine extends Engine
{
private class OGLES2SV extends GLSurfaceView
{
public OGLES2SV(Context context)
{
super(context);
}
public void onDestroy()
{
super.onDetachedFromWindow();
}
}
private OGLES2SV SV = null;
@Override
public void onCreate(SurfaceHolder surfaceHolder)
{
super.onCreate(surfaceHolder);
SV = new OGLES2SV(LW.this);
SV.setEGLContextClientVersion(2);
SV.setRenderer(new OGLES2Renderer());
}
@Override
public void onVisibilityChanged(boolean visible)
{
if (!visible)
SV.onResume();
else
SV.onPause();
super.onVisibilityChanged(visible);
}
@Override
public void onDestroy()
{
SV.onDestroy();
super.onDestroy();
}
}
@Override
public Engine onCreateEngine()
{
return new OGLES2Engine();
}
}
public class OGLES2Renderer implements GLSurfaceView.Renderer
{
private static final String LOG_TAG = "GL2Surface";
@Override
public void onDrawFrame(GL10 unused)
{
Log.i(LOG_TAG, "Draw frame");
}
@Override
public void onSurfaceChanged(GL10 unused, int width, int height)
{
Log.i(LOG_TAG, "Surface changed");
}
@Override
public void onSurfaceCreated(GL10 unused_, EGLConfig _unused)
{
Log.i(LOG_TAG, "Surface created");
}
}