代码之家  ›  专栏  ›  技术社区  ›  Данил Вагапов

是否可以在不使用setzorderOnTop的情况下使surfaceView透明(true)?

  •  0
  • Данил Вагапов  · 技术社区  · 6 年前

    我需要使我的libgdx glsufraceView透明,并有机会在上面添加一些Android视图。之前我使用了下面的代码:

    if (graphics.getView() instanceof SurfaceView) {
        GLSurfaceView glView = (GLSurfaceView) graphics.getView();
        glView.setZOrderOnTop(true);
        glView.getHolder().setFormat(PixelFormat.RGBA_8888);
    }
    

    但是,这段代码并不能让我在上面添加Android视图。经过短暂的研究,我找到了替代品: glView.setZOrderMediaOverlay(true); . 有了这行代码,我可以在表面上显示任何视图,但透明的部分变成了黑色。

    我认为这个问题是因为我的代码是在setrenderer(…)之后启动的。在gdx后端android中找到包含setrenderer(…)的方法之后。几分钟后,我下载了libgdx源代码,并在setrenderer(…)之前添加了行,但不幸的是它没有帮助,情况仍然一样。

    我尝试的代码:

    1)

    GLSurfaceView20 view = new GLSurfaceView20(application.getContext(), resolutionStrategy, config.useGL30 ? 3 : 2);
    view.setZOrderOnTop(true);
    
    if (configChooser != null)
        view.setEGLConfigChooser(configChooser);
    else
        view.setEGLConfigChooser(config.r, config.g, config.b, config.a, config.depth, config.stencil);
    
    view.getHolder().setFormat(PixelFormat.RGBA_8888);
    
    view.setRenderer(this);
    view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    
    return view;
    

    2)

    GLSurfaceView20 view = new GLSurfaceView20(application.getContext(), resolutionStrategy, config.useGL30 ? 3 : 2);
    if (configChooser != null)
        view.setEGLConfigChooser(configChooser);
    else
        view.setEGLConfigChooser(config.r, config.g, config.b, config.a, config.depth, config.stencil);
    
    view.setZOrderOnTop(true);
    view.getHolder().setFormat(PixelFormat.RGBA_8888);
    
    view.setRenderer(this);
    return view;
    

    3)

    GLSurfaceView20 view = new GLSurfaceView20(application.getContext(), resolutionStrategy, config.useGL30 ? 3 : 2);
    
    if (configChooser != null)
        view.setEGLConfigChooser(configChooser);
    else
        view.setEGLConfigChooser(config.r, config.g, config.b, config.a, config.depth, config.stencil);
    
    view.getHolder().setFormat(PixelFormat.RGBA_8888);
    view.setZOrderMediaOverlay(true);
    view.setEGLContextClientVersion(2);
    
    view.setRenderer(this);
    return view;
    

    我也发现关于这个主题的话题很少,但是没有正确的答案。 有可能做到吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Данил Вагапов    6 年前

    view.setOpaque(false);