API v2 Карт Android - приближается к вращению маркера?

Мы держим приложение в строевой стойке от API Карт v1 до v2 API и испытываем затруднения из-за маркеров.

Нам нужны маркеры, которые указывают в определенном географическом направлении. В V1 мы могли построить битовый массив, указывающий в правильном направлении во время ничьей, но в V2 не может быть изменен битовый массив маркера.

Я не уверен, должен ли лучший подход разрушить и восстановить все наши маркеры, когда карта вращается (который походит на исполнительную проблему), или пытаться тянуть их всех самостоятельно. Это могло быть через TileOverlay или через собственное представление, что мы сидели сверху карты.

Мне действительно не нравится ни один из этих подходов. Кто-либо судил какого-либо из них?

ОБНОВЛЕНИЕ:

Я попытался тянуть через собственное представление, но это было слишком отстающим, когда карту тянули.

I'm now destroying & recreating the markers, but that is (as expected) a performance problem, taking ~2000mS to update 60 markers.

4
добавлено отредактировано
Просмотры: 2
nl ja de

4 ответы

Хорошие новости все! Google добавил вращение к API Карт, таким образом, мы не должны больше катить наши собственные внедрения.

They have also added flat markers, which I guess is more related to the original question. A flattened marker will always stay in the orientation it was originally drawn on the map: https://developers.google.com/maps/documentation/android/marker#flatten_a_marker

Единственное требование - то, что вы ссылаетесь на последнюю версию Google Play Services.

5
добавлено

Я также переписываю свое приложение (Runbot) для нового API и должен был выяснить, как создать таможенные маркеры, представляющие этапы (как 1 км, 2 км...) и как показать или показать не всем им в зависимости от уровня увеличения масштаба изображения. У меня был обычай, drawable, который я использовал для v1 API и что я делаю теперь, чтобы отдать маркеры, об этом (, Положение является моим собственным классом, который поддерживает информацию о положении и дополнительную информацию; все необходимые здесь являются LatLng собственность):

private void addMarker(Position p, MilestoneDrawable milestone) {
    if (mMarkers.containsKey(p)) {
        mMarkers.get(p).setVisible(true);
    } else {
        Marker m = mMap.addMarker(new MarkerOptions()
            .position(p.latLng)
            .icon(BitmapDescriptorFactory.fromBitmap(Util.drawableToBitmap(milestone)))
            .anchor(0.5f, 1.0f)//bottom center
            );
        mMarkers.put(p, m);
    }
}

Помимо создания и добавления таможенных маркеров, что вы видите, то, что я держу маркеры в HashMap , таким образом, я не должен разрушить и создать их все время. Когда дело доходит до изменения масштаб изображения и решения, которые показать, я сначала установил все маркеры к невидимой операции и, чем требование addMarker() для тех, я хочу быть показанным, и те, которых я уже имею в HashMap , я просто делаю видимыми снова.

Я надеюсь, что это помогает вам немного. У меня есть немного смешанные чувства к новому API...

0
добавлено

разве вы не можете использовать addMarker (новый MarkerOptions ()) метод?

Если вам нужен таможенный маркер, можно создать внедрение InfoWindowAdapter и использовать то внедрение как mMap.setInfoWindowAdapter (новый CustomInfoWindowAdapter ());

here is the documentation for InfoWindowAdapter

0
добавлено
@RichardSewell I don' t знают, как вращать маркер, но, конечно, можно вращать изображение (стрела), указывающая на определенное местоположение, использование отношение . Смотрите к этому вопросу: stackoverflow.com/questions/15381358/…
добавлено автор AlexAndro, источник
ошибка mu, что я понял неправильно, но я думаю битовый массив маркера, может быть изменена, проверить, что примеры кода для Google наносят на карту v2, проверьте MarkerDemoActivity, у них есть таможенные маркеры там, кроме того, если вы не welling, чтобы изменить что-нибудь в представлении, можно отвергнуть onConfigurationChanged, чтобы не изменять карту. я разбирался в вас на этот раз?
добавлено автор Moh Sakkijha, источник
Нет, MarkerDemoActivity только настраивает символы маркера в addMarkersToMap, когда это делает маркеры. Это никогда не изменяет символ маркера.
добавлено автор Richard Sewell, источник

У меня была подобная проблема, где у меня были маркеры, которые должны были вращаться. Мое решение состояло в том, чтобы иметь объект маркер, представленный быть ответственным за создание маркера. У меня есть несколько методов в объекте, которые похожи:

protected Marker getMarker(GoogleMap map) {
    if (this.marker == null) {
        marker = map.addMarker(new MarkerOptions().position(location).
            icon(BitmapDescriptorFactory.fromBitmap(BusMarkerImageFactory.
            getMarkerIcon(heading))));
    }
    return marker;
}

protected void updateMarker(GoogleMap map) {
    if (marker != null) {
        rotateIcon();
        marker.setPosition(location);
    } else {
        getMarker(map);
    }

private void rotateIcon() {
    marker.setIcon(BitmapDescriptorFactory.
        fromBitmap(BusMarkerImageFactory.getMarkerIcon(heading)));
}

Это от системы, которая тянет автобусы с маркерами, указывающими в направлении, которое они возглавляют, поэтому конечно, ваш код будет отличаться, но понятие очень похоже. Вместо того, чтобы восстановить весь маркер вы держите ссылку на него где-нибудь и затем просто перезагружаете символ.

Конечно, рисование всех тех битовых массивов для незначительных изменений является утечкой в памяти. Я использовал образец в наилегчайшем весе в (неправильно названный) BusMarkerImageFactory, чтобы держать 16 изображений для 16 возможных диапазонов заголовка. Это - статический класс, который просто берет в заголовке и возвращает изображение, которое я нанес на карту к тому диапазону.

0
добавлено