9

在这种情况下,我想在谷歌地图上绘制位图,gms v2并且每个用户位置更新都会强制位图更新。目前我使用以下代码片段:

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(...)使用andaddPolyline(...)不是一个选项在地图上绘制图元,因为我需要标准 api 中不存在的绘图功能。

4

2 回答 2

7

一种优化可能是检查新位置是否与旧位置相同,如果是则不要重绘。另外我不认为每次都需要创建描述符。

此处描述了另一种移动标记的方法。这是官方样品中的那个。

于 2013-07-22T13:14:26.937 回答
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;
    }
}
于 2013-07-25T03:28:40.323 回答