Android Google Maps без пользовательского интерфейса - PullRequest
0 голосов
/ 30 января 2020

Репликация некоторого поведения в приложении iOS на Android, и одним из требований является возможность создания снимка карты. Google maps предлагает возможность создания снимка карты, но в отличие от приложения iOS я не вижу способа создания карты исключительно в памяти и ее последующего сохранения в БД. Я создавал карты раньше, но это всегда делалось с целью показать карту и пользователя, взаимодействующего с ней. В этом сценарии я не хочу ничего из этого. Там не должно быть никакой карты для просмотра в этой точке. Позже сгенерированное изображение (растровое изображение) из моментального снимка будет доставлено пользователю.

У меня есть функция onMapReady, настроенная примерно так:

override fun onMapReady(map: GoogleMap?) {

    map?.let {
        //add route
        it.addPolyline(routeLines)

        //add markers
        for(marker in markerOptions) {
            it.addMarker(marker)
        }


        val callback = GoogleMap.SnapshotReadyCallback(){
            saveSnapshot(it)
        }
        it.snapshot(callback)
    }
}

Но прежде чем onMapReady сможет даже Чтобы вызвать карту, сама карта должна быть инициализирована.

var mMap: GoogleMap? = null

Как создать карту в памяти только без визуальной информации?

Спасибо ^. ^

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Вы можете использовать Карты Stati c API или попробовать это решение на основе MapView облегченного режима :

...
mMapView = new MapView(this, options);
mMapView.onCreate(mapViewBundle);

mMapView.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {

            // form your card (add markers, path etc.) here: 
            googleMap.addMarker(new MarkerOptions()
                    .position(KYIV)
                    .title("Kyiv"));

            // set map size in pixels and initiate image loading
            mMapView.measure(View.MeasureSpec.makeMeasureSpec(mMapWidth, View.MeasureSpec.EXACTLY),
                    View.MeasureSpec.makeMeasureSpec(mMapHeight, View.MeasureSpec.EXACTLY));
            mMapView.layout(0, 0, mMapWidth, mMapHeight);

            googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
                @Override
                public void onMapLoaded() {
                    mMapView.setDrawingCacheEnabled(true);
                    mMapView.measure(View.MeasureSpec.makeMeasureSpec(mMapWidth, View.MeasureSpec.EXACTLY),
                            View.MeasureSpec.makeMeasureSpec(mMapHeight, View.MeasureSpec.EXACTLY));
                    mMapView.layout(0, 0, mMapWidth, mMapHeight);
                    mMapView.buildDrawingCache(true);
                    Bitmap b = Bitmap.createBitmap(mMapView.getDrawingCache());
                    mMapView.setDrawingCacheEnabled(false);
                    mImageView.setImageBitmap(b);

                }
            });

        }
});
...
0 голосов
/ 30 января 2020

Похоже, это ограничение Google Maps. Читая документацию GoogleMaps , документацию , это не может быть сделано, как вы можете с MapKit в iOS.

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