How to overlay GLSurfaceView over a MapView in Android?

早过忘川 提交于 2020-01-10 02:16:32

问题


I want to create a simple Map based application in android ,where i can display my current position.Instead of overlaying a simple Image on the MapView to represent the position, i want to overlay the GLSurfaceView on the MapView. But i don't know how to achieve this. Is there any way to do that?. Please anybody knows the solution help me.


回答1:


I was stuck on a similar problem until I looked at the documentation and realized that MapView extends ViewGroup, so overlaying a GlSurfaceView actually ends up being pretty trivial.

MapView.addView(...) and MapView.LayoutParams allow you to some pretty useful things like place a View at a specific GeoPoint on the map.

More documentation: https://developers.google.com/maps/documentation/android/reference/com/google/android/maps/MapView.LayoutParams.html

Here's what I did:

@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
            )
        );
}

Plus also do what the solution above states. I sub-classed GlSurfaceView, so mine looks slightly different:

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);  
}



回答2:


You need to create the GLSurfaceView and set its EGLConfigChooser like this:

glSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);

then set the format of the holder to translucent

glSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);

and add the GLSurfaceView and the MapView to the Layout

setContentView(glSurfaceView);

addContentView(mapView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));

finally in your renderer you'll need to set the clear color so it is transparent

gl.glClearColor(0, 0, 0, 0);



来源:https://stackoverflow.com/questions/2825539/how-to-overlay-glsurfaceview-over-a-mapview-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!