如何在Here Map中实现当前位置蓝色图标

时间:2017-06-27 17:36:27

标签: android here-api

我正在使用Here Map SDK,我需要显示一个带有圆形动画的蓝色图标,用于显示当前位置。

enter image description here

任何人都可以告诉我该怎么做。

现在我的代码只设置了蓝点的图标。我不知道如何添加圆圈动画。

请注意,mMap引用为Map object from the Here Android SDK

 mMap.getPositionIndicator().setVisible(true);
                    mMap.getPositionIndicator().setZIndex(0);
                    mMap.setZoomLevel(15);
                    mMap.getPositionIndicator().setAccuracyIndicatorVisible(true);
                    mMap.getPositionIndicator().setMarker(createImage(R.drawable.ic_location_dot));

8 个答案:

答案 0 :(得分:3)

  

启用Google地图的MyLocation层

googleMap.setMyLocationEnabled(true);

答案 1 :(得分:0)

对于javascript,您可以使用

map.addObject(new H.map.Circle(
// The central point of the circle
{lat:28.6071, lng:77.2127},
// The radius of the circle in meters
1000,
{
  style: {
    strokeColor: 'rgba(55, 85, 170, 0.6)', // Color of the perimeter
    lineWidth: 2,
    fillColor: 'rgba(0, 128, 0, 0.1)'  // Color of the circle
  }
}
));

android应该有类似的实现。

答案 2 :(得分:0)

试试这个:

mMap.setMyLocationEnabled(true);

启用或禁用my-location图层。 在启用并且位置可用时,我的位置层连续地绘制用户当前位置和方位的指示,并显示允许用户与其位置交互的UI控件(例如,启用或禁用相机跟踪它们的位置和方位)。

如果你把它放在下面会好多了:

@Override
public void onMapReady(GoogleMap googleMap) {

}

答案 3 :(得分:0)

我已成功测试此代码,并使用用户的当前位置调用addPulsatingEffect(Location userLocation)方法。

private Circle lastUserCircle;
private static final long PULSE_DURATION = 2000;
private static final float RADIUS = 200.0f;
private ValueAnimator lastPulseAnimator;

private void addPulsatingEffect(Location userLocation){

final LatLng userLatlng = new LatLng(userLocation.getLatitude(), userLocation.getLongitude());

if(lastPulseAnimator != null){
    lastPulseAnimator.cancel();
}

if(lastUserCircle != null) {
    lastUserCircle.setCenter(userLatlng);
}

lastPulseAnimator = valueAnimate(RADIUS, new ValueAnimator.AnimatorUpdateListener() {

    @Override
    public void onAnimationUpdate(ValueAnimator animation) {

        if(lastUserCircle != null)
            lastUserCircle.setRadius((Float) animation.getAnimatedValue());
        else {
            lastUserCircle = mMap.addCircle(new CircleOptions()
                    .center(userLatlng)
                    .radius((Float) animation.getAnimatedValue())
                    .strokeColor(Color.BLUE)
                    .strokeWidth(4.0f));
        }
    }
});
}

protected ValueAnimator valueAnimate(float radius, ValueAnimator.AnimatorUpdateListener updateListener){

ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, radius);
valueAnimator.setDuration(PULSE_DURATION);
valueAnimator.addUpdateListener(updateListener);
valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
valueAnimator.setRepeatMode(ValueAnimator.RESTART);

valueAnimator.start();
return valueAnimator;
}

答案 4 :(得分:0)

对于这个用例,最好编写自己的位置指示器。

要做的三件事: 1:注册PositioningManager回调,将更新后的位置传递给您的代码。 2:使用所需图像创建MapMarker并将其添加到地图中。 4:创建具有所需颜色的MapCircle并将其添加到地图中。圆的半径应设置为Positioning Manager回调的精度参数。

这样做的逻辑是更新MapCircle的半径,并在从PositioningManager收到新位置时更新MapMarker和MapCircle的GeoCoordinate。

您可以通过使用计时器等方式添加动画,以便为任何准确度更改设置动画。

答案 5 :(得分:0)

/* create a MarkerOptions */
MarkerOptions mOptions = new MarkerOptions();

/* create a MarkerInfoAdapter */
MarkerInfoAdapter infoAdapter = new MarkerInfoAdapter(MapsActivity.this.getLayoutInflater());

/* set MarkerInfoAdapter into your Map object */
MapFragment googleMap = FragmentManager.FindFragmentById<MapFragment> (Resource.Id.map);

/* get the GoogleMap object */
GoogleMap myMap = googleMap.getMapAsync(this);

/* set myMap type */
myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

/* set the MarkerInfoAdapter */
myMap.clear(); /* 
myMap.setInfoWindowAdapter(infoAdapter);


/* you must have your current location's LatLng  */
mOptions.position(currentLatLng); /* reach the position of the LatLng for that mark */

/* set the icon for your current location using BitmapDescriptorFactory */
mOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
myMap.addMarker(mOptions);

/* modify your marker icon to HUE_BLUE */                       mOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));

答案 6 :(得分:0)

我遇到了和你一样的问题,经过两周的尝试后,各种选项,这行代码都适合我,所以你可以显示&#34;蓝色图标&#34;

m_map.setCenter(new GeoCoordinate(latitudeGPS, longitudeGPS, 0.0),Map.Animation.NONE);
                m_mapFragment.getPositionIndicator().setVisible(true);
                m_map.getPositionIndicator().setAccuracyIndicatorVisible(true);
                Log.d("initialize bolita", "" + 1.1 );
                PositioningManager.getInstance().start(PositioningManager.LocationMethod.GPS_NETWORK);m_map.addMapObject(m_positionIndicatorFixed);

确保您已请求清单上的所有权限。

答案 7 :(得分:0)

您可以通过com.here.android.mpa.mapping.PositionIndicator类控制HERE Maps当前位置图标。

其实例保存在com.here.android.mpa.mapping.MapView中,该实例可能被包裹在com.here.android.mpa.mapping.SupportMapFragment之类的片段中。

示例:

mapFragment.getPositionIndicator().setVisible(true)
mapView.getPositionIndicator().setAccuracyIndicatorVisible(true)