2013-07-15 49 views
9

Trong trường hợp này, tôi muốn vẽ bitmap trên Google Maps bằng cách sử dụng gms v2 và mỗi cập nhật vị trí người dùng thực thi cập nhật bitmap. Hiện tại tôi sử dụng đoạn mã sau:Vẽ lại bitmap trên Google Maps v2 cho Android

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)); 
} 

Phương thức update() được gọi mỗi giây. Tôi thấy phương pháp này cực kỳ kém hiệu quả và tôi đang tìm kiếm giải pháp tốt hơn (tức là không yêu cầu thêm/xóa lớp phủ sau mỗi lần cập nhật). Vẽ nguyên thủy trên bản đồ bằng cách sử dụng addPolygon(...)addPolyline(...) không phải là một tùy chọn vì tôi yêu cầu khả năng vẽ không có trong api tiêu chuẩn.

Trả lời

6

Một tối ưu hóa có thể là để kiểm tra xem vị trí mới có giống với vị trí cũ và không vẽ lại nếu trường hợp đó xảy ra. Ngoài ra tôi không nghĩ rằng bộ mô tả cần phải được tạo ra mỗi lần.

Một cách tiếp cận khác để di chuyển điểm đánh dấu được mô tả here. Đó là một từ mẫu chính thức.

4

Tôi không chắc chắn nếu đây là những gì bạn muốn, nhưng đây là cách tôi đã sử dụng bitmap tùy chỉnh trong Google Maps.

Mã đánh dấu:

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); 

Adapter tooltip:

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; 
    } 
} 
Các vấn đề liên quan