Как наложить GLSurfaceView поверх MapView в Android? - PullRequest
3 голосов
/ 13 мая 2010

Я хочу создать простое приложение на основе карты в Android, где я могу отобразить свою текущую позицию. Вместо наложения простого изображения на MapView для представления позиции, я хочу наложить GLSurfaceView на MapView. Но я не знаю, как этого добиться. Есть ли способ сделать это? Пожалуйста, кто-нибудь знает, решение поможет мне.

Ответы [ 2 ]

4 голосов
/ 28 апреля 2012

Я застрял в подобной проблеме, пока не посмотрел документацию и не понял, что MapView расширяет ViewGroup, поэтому наложение GlSurfaceView на самом деле оказывается довольно тривиальным.

MapView.addView(...) и MapView.LayoutParams позволяют вам довольно полезные вещи, такие как размещение 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
            )
        );
}

Плюс также делайте то, что сказано выше. Я подклассифицировал 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);  
}
3 голосов
/ 07 июля 2010

Вам необходимо создать GLSurfaceView и установить его EGLConfigChooser следующим образом:

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

затем установите формат держателя на полупрозрачный

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

и добавьте GLSurfaceView и MapView к макету

setContentView(glSurfaceView);

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

наконец, в вашем рендере вам нужно установить прозрачный цвет, чтобы он был прозрачным

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...