Изменить TransformCenter динамически - PullRequest
0 голосов
/ 04 февраля 2019

Я использую ЗДЕСЬ Android SDK Premium 3.9.Моя цель заключается в следующем:

  1. Начните с показа текущего местоположения пользователя на определенном PointF на экране
  2. На основе некоторых условий я хочу добавить "Маркер назначения "на экране.Маркер назначения находится в другом месте, чем текущее местоположение.Этот маркер не должен быть в центре - скорее он должен быть смещен на определенное значение PointF

Я не смог этого добиться.Я могу использовать setTransformCenter один раз для начального «текущего местоположения», и оно вступит в силу.Однако, если я позвоню еще раз, это, кажется, не вступит в силу.Мой маркер, который я добавил на шаге 2, просто никогда не находится в правильном положении.

Вот какой-то псевдокод:

hereMap.setTransformCenter(positionIndicatorPoint);

GeoCoordinate markerCoordinate = getMarkerCoordinates();
MapMarker marker = new MapMarker();
marker.setCoordinate(markerCoordinate);


hereMap.setTransformCenter(mapMarkerPoint);
hereMap.addMapObject(marker);
hereMap.setCenter(marker.getCoordinate(), Map.Animation.NONE);

Что я делаю не так?

РЕДАКТИРОВАТЬ:

Нет необходимости, чтобы индикатор текущего положения был "на экране", когда отображается маркер.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019
  1. Убедитесь, что вы звоните Map.setTransformCenter(PointF) с действительным PointF.X и Y должны находиться в пределах диапазона [x from 0 to map.getWidth(), y from 0 to map.getHeight()].
  2. Метод Map.setTransformCenter является только установщиком, вам необходимо выполнить другой вызов метода, например Map.setCenter() или Map.zoomTo().чтобы увидеть, как это работает.

В своем псевдокоде во второй части вы используете hereMap.setCenter(marker.getCoordinate(), Map.Animation.NONE);, убедитесь, что вы фактически переходите к новой географической координате, а не к старой.Но на самом деле он должен перейти к новому центру карты, даже если вы переместитесь к старой географической координате.

Я сделал небольшой gist , чтобы показать, как можно использовать Map.setTransformCenter(PointF).

0 голосов
/ 04 февраля 2019

Вы можете обратиться к нашему репозиторию github за примерами на MapMarker - https://github.com/heremaps/here-android-sdk-examples/blob/master/map-objects/app/src/main/java/com/here/android/example/map/objects/MapFragmentView.java. Ниже приведен фрагмент кода, взятый из github.Вы также можете посмотреть на множество других примеров.Надеюсь, это поможет!

 /**
     * Initialize Create MapMarker Button to add/remove MapMarker.
     */
    private void initCreateMapMarkerButton() {
        m_marker_button = (Button) m_activity.findViewById(R.id.marker_button);

        m_marker_button.setOnClickListener(new View.OnClickListener() {
            // if MapMarker already exist on map, then remove MapMarker, other create MapMarker.
            @Override
            public void onClick(View v) {
                if (m_map != null && m_map_marker != null) {
                    m_map.removeMapObject(m_map_marker);
                    m_map_marker = null;
                } else {
                    createMapMarker();
                }
            }
        });
    }

    /**
     * create a MapMarker and add the MapMarker to active map view.
     */
    private void createMapMarker() {
        // create an image from cafe.png.
        Image marker_img = new Image();
        try {
            marker_img.setImageResource(R.drawable.cafe);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // create a MapMarker centered at current location with png image.
        m_map_marker = new MapMarker(m_map.getCenter(), marker_img);
        // add a MapMarker to current active map.
        m_map.addMapObject(m_map_marker);
}
...