Ken_Rao's blog

Indie game developer is my end goal

如何在安卓上给应用程序设置透明背景 NativeActivity篇

Question: 对于NativeActivity如何在安卓上给应用程序设置透明背景?

以Cocos2d-x 3.0 rc0为例,对于NativeActivity,效果图:

如果你想让你的activity透明,很简单,只需要4步。

  • 第一步:打开AndroidManifest.xml文件,添加Translucent到
1
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

  • 第二步:打开Cocos2dxActivity.java文件,添加
1
getWindow().setFormat(PixelFormat.TRANSLUCENT);

  • 第三步:打开cocos2d/cocos/2d/CCDirector.cpp文件,找到setGLDefaultValues()函数,修改最后一个alpha值,范围从0.0f到1.0f。
1
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

  • 第四步:打开cocos2d/cocos/2d/platform/android/nativeactivity.cpp,找到engine_init_display(struct engine* engine)函数,修改如下数组

修改

1
2
3
4
5
6
7
8
9
10
const EGLint attribs[] = {
            EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
            EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
            EGL_BLUE_SIZE, 5,
            EGL_GREEN_SIZE, 6,
            EGL_RED_SIZE, 5,
            EGL_DEPTH_SIZE, 16,
            EGL_STENCIL_SIZE, 8,
            EGL_NONE
    };

1
2
3
4
5
6
7
8
9
10
11
const EGLint attribs[] = {
                EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
                EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,  
 //EGL_BLUE_SIZE, 5,   -->delete 
 //EGL_GREEN_SIZE, 6,  -->delete 
 //EGL_RED_SIZE, 5,    -->delete 
                EGL_BUFFER_SIZE, 32,  //-->new field
                EGL_DEPTH_SIZE, 16,
                EGL_STENCIL_SIZE, 8,
                EGL_NONE
        };

搞定收工

Comments