在这种情况下,我想使用gms v2
在Google地图上绘制位图,每个用户位置更新都会强制执行位图更新。目前我使用以下代码段:
public void init(){
result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
canvas = new Canvas(result);
}
public void update(){
// draw on canvas ...
draw(result);
}
public void draw(Bitmap modifiedBmp) {
if (overlay != null) {
overlay.remove();
}
BitmapDescriptor descriptor = BitmapDescriptorFactory.fromBitmap(modifiedBmp);
overlay = map.addGroundOverlay(new GroundOverlayOptions().image(descriptor).positionFromBounds(bounds).zIndex(100));
}
每秒调用update()
方法。我发现这种方法非常低效,我正在寻找更好的解决方案(即每次更新后不需要添加/删除叠加)。使用addPolygon(...)
和addPolyline(...)
在地图上绘制图元不是一种选择,因为我需要标准API中不存在的绘图功能。
答案 0 :(得分:7)
一个优化可能是检查新位置是否与旧位置相同,如果是这种情况则不重绘。另外我不认为每次都需要创建描述符。
描述移动标记的另一种方法here。这是官方样本中的那个。
答案 1 :(得分:4)
我不确定这是否是您想要的,但这就是我在Google地图中使用自定义位图的方式。
标记代码:
BitmapDescriptor iconBitmap = BitmapDescriptorFactory
.fromResource(R.drawable.item_map_marker);
MarkerOptions options = new MarkerOptions();
options.position(new LatLng(hs.lat, hs.lng));
options.title(hs.sitename);
options.snippet(hs.street + ", " + hs.suburb);
options.icon(iconBitmap);
mMap.addMarker(options);
工具提示适配器:
public class MyInfoWindowAdapter implements InfoWindowAdapter {
public interface OnRenderCustomInfoWindow {
public void onRender(Marker marker, View mWindow);
}
private View mWindow;
private OnRenderCustomInfoWindow mRenderer;
public MyInfoWindowAdapter(Context context,
OnRenderCustomInfoWindow onRender) {
mRenderer = onRender;
mWindow = LayoutInflater.from(context).inflate(
R.layout.view_services_map_infowindow, null);
}
@Override
public View getInfoWindow(Marker marker) {
mRenderer.onRender(marker, mWindow);
return mWindow;
}
@Override
public View getInfoContents(Marker marker) {
return null;
}
}