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);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…