此处映射Android SDK位置指示器旋转



我的应用程序使用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);
}
}

此代码按预期工作,但位置更新不顺利。每当位置更新时,它都会反弹。任何关于这方面的建议都会很有帮助。

您不需要在每次位置更新上设置图标。只需通过调用方法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);

}

现在,您也在寻找位置指示器,以顺利更新。因此,当您设置如下标记时,可以使用方法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中可用,该SDK为3.16,此版本的SDK使用Android X.

最新更新