2

我正在为我的应用程序使用 HERE MAPS PREMIUM SDK。我需要我当前的位置图标随着方向的变化而旋转。类似于其他地图中的当前位置指示器。由于 HERE SDK 没有默认方法,因此我使用以下代码在调用 onPositionUpdated() 回调时旋转位置指示器,如下所示,

private PositioningManager.OnPositionChangedListener mapPositionHandler = new PositioningManager.OnPositionChangedListener() {
        @Override
        public void onPositionUpdated(PositioningManager.LocationMethod method, GeoPosition position,
                                      boolean isMapMatched) {                        
                        Matrix matrix = new Matrix();
                        matrix.postRotate((float) mHeading - mMap.getOrientation());
                        Bitmap newBitmap = Bitmap.createBitmap(myLocationIcon, 0, 0, myLocationIcon.getWidth(), myLocationIcon.getHeight(), matrix, true);
                        Image newImage = new Image();
                        newImage.setBitmap(newBitmap);
                        if (mMapFragment.getPositionIndicator() != null) {
                            mMapFragment.getPositionIndicator().setMarker(newImage);
                        }
}

此代码按预期工作,但位置更新不顺畅。每当位置更新时,它都会弹跳。对此的任何建议都会很有帮助。

4

1 回答 1

2

您不需要在每次位置更新上设置图标。只需通过调用方法 setMarker 将图像图标设置为位置指示器一次。如果您需要更改图标,则可以再次调用 setMarker。现在由于您需要位置图标随着方向的变化而旋转,您可以在 onPositionUpdated 中使用以下代码块

@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onPositionUpdated(final PositioningManager.LocationMethod locationMethod,
                              final GeoPosition geoPosition, final boolean mapMatched) {
   
        final GeoCoordinate coordinate = geoPosition.getCoordinate();
        map.setCenter(coordinate, Map.Animation.BOW);
        map.setOrientation((long) Math.floor(geoPosition.getHeading() + 0.5d), Map.Animation.BOW);

}

现在您也在寻找要平滑更新的 PositionIndicator。因此,您可以在设置标记时使用方法 setSmoothPositionChange(true),如下所示:

            Image navigation_pointer = new Image();
            navigation_pointer.setImageResource(R.drawable.navigation_ico_new);
            mMapFragment.getPositionIndicator().setMarker(navigation_pointer);
            mMapFragment.getPositionIndicator().setSmoothPositionChange(true); 

请注意:此方法 setSmoothPositionChange(true) 仅适用于最新的 HERE MAP SDK 3.16,此版本的 SDK 使用 Android X。

于 2020-08-25T10:40:39.293 回答