如何在 Android 中将 GLSurfaceView 覆盖在 MapView 上?

Raj*_*ian 3 android opengl-es

我想在 android 中创建一个简单的基于地图的应用程序,在其中我可以显示我当前的位置。我想在 MapView 上覆盖 GLSurfaceView,而不是在 MapView 上覆盖简单的图像来表示位置。但我不知道如何实现这一目标。有什么办法可以做到这一点吗?请任何知道解决方案的人帮助我。

Sir*_*lay 5

我陷入了类似的问题,直到我查看文档并意识到MapViewextends ViewGroup,所以覆盖 aGlSurfaceView实际上最终变得非常微不足道。

MapView.addView(...)MapView.LayoutParams允许您执行一些非常有用的操作,例如将 a 放置在地图上的View特定位置。GeoPoint

更多文档:https://developers.google.com/maps/documentation/android/reference/com/google/android/maps/MapView.LayoutParams.html

这就是我所做的:

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapview);

    MapView map_view = (MapView) findViewById(R.id.map_view);

    CustomGlView gl_view = new CustomGlView(this);

    // This is where the action happens.
    map_view.addView(gl_view, new MapView.LayoutParams(
            MapView.LayoutParams.FILL_PARENT, 
            MapView.LayoutParams.FILL_PARENT, 
            0,0, 
            MapView.LayoutParams.TOP_LEFT
            )
        );
}
Run Code Online (Sandbox Code Playgroud)

另外还要执行上述解决方案所述的操作。我对 GlSurfaceView 进行了子类化,所以我的看起来略有不同:

public CustomGlView(Context context) {
    super(context);
    YourCustomGlRenderer renderer = new YourCustomGlRenderer();
    setEGLConfigChooser(8, 8, 8, 8, 16, 0);
    setRenderer(renderer);
    getHolder().setFormat(PixelFormat.TRANSLUCENT);

    // Have to do this or else 
    // GlSurfaceView wont be transparent.
    setZOrderOnTop(true);  
}
Run Code Online (Sandbox Code Playgroud)