首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android OpenGL es2.0动态壁纸- GLSurface方法不调用

Android OpenGL es2.0动态壁纸- GLSurface方法不调用
EN

Stack Overflow用户
提问于 2012-12-03 10:53:41
回答 1查看 1.1K关注 0票数 0

我遵循下一篇教程(第一部分),但类结构稍微简单一些。

http://www.learnopengles.com/how-to-use-opengl-es-2-in-an-android-live-wallpaper/

当我尝试选择壁纸时,我会得到下一个事件链(预览)。

onResume()->onPause()->onResume()->onPause() onCreateEngine()->onCreate() ->

为什么我得到两次onResume()->onPause()?

当我点击“套装壁纸”时,我会得到额外的onPause()->onResume()和活壁纸崩溃(也许是因为onPause()调用了2次)。

而且,我也没有在预览版或壁纸上看到像onSurfaceCreated(),onDrawFrame()这样的OGLES2Renderer调用。

我错过了什么?

Android清单(其中一部分)

代码语言:javascript
复制
<uses-feature
    android:name="android.software.live_wallpaper"
    android:required="true" />

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
<service
android:name="com.aristarhys.lw.LW"
android:label="@string/app_name"
android:permission="android.permission.BIND_WALLPAPER" >
<intent-filter>
    <action android:name="android.service.wallpaper.WallpaperService" />
</intent-filter>
<meta-data
    android:name="android.service.wallpaper"
    android:resource="@xml/lw" />

res/xml/lw.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<wallpaper 
xmlns:android="http://schemas.android.com/apk/res/android"
android:thumbnail="@drawable/ic_launcher"
android:description="@string/app_desc"/>

LW.java

代码语言:javascript
复制
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();
}
}

OGLES2Renderer.java

代码语言:javascript
复制
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");
}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-03 10:59:02

您可以使用发动机 Wallpaper extension来实现这个功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13681745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档