2015-04-30 156 views
0

我已經創建了一個應用程序,其中所有的標記都具有CustomInfoWindow.But我的應用程序中的標記數量越來越大。所以我看到了關於map-utils庫並決定實現它。我想實現標記聚類屬性。之前實現標記集羣屬性我有這樣的代碼在我的應用程序:如何在google maps v2中使用android map utils庫實現InfoWindow?

private void drawMarkerAndLine(ArrayList<StatusData> result) throws Exception{ 
     try { 
      if (result.size() != 0) { 
       PolygonOptions options = new PolygonOptions() 
         .fillColor(0x330000FF) 
         .strokeColor(Color.BLUE) 
         .strokeWidth(3); 
       for (int i = 0; i < result.size(); i++) { 
        String status = result.get(i).getStatus(); 
        String name = result.get(i).getPersonName(); 
        String email = result.get(i).getPersonMail(); 
        name += "/" + email; 
        Double lat = Double.parseDouble(result.get(i).getLatitude()); 
        Double lng = Double.parseDouble(result.get(i).getLongitude()); 
        if (status.length() > 20) { 
         status = status.substring(0, 20); 
         status += "..."; 
        } 
        LatLng ll = new LatLng(lat, lng); 
        options.add(ll); 
        map.addMarker(new MarkerOptions().position(ll).title(name).snippet(status)); 
        if (i == 0) { 
         map.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 15)); 
        } 
       } 
       map.addPolygon(options); 
      } 
     }catch (Exception e){ 
      Toast.makeText(getActivity(),"Internet Connection Error.",Toast.LENGTH_SHORT).show(); 
     } 

現在我希望留樣的信息窗口點擊我以前所有的性質,map.setInfoWindowAdapter和others.Just我想實現當我縮放該out標記會聚集在一起,放大時會顯示標記,我可以像我以前那樣點擊infowindow。我試圖改變我的這個類,但是徒勞無功。

private void drawMarkerAndLine(ArrayList<StatusData> result) throws Exception{ 
     try { 
      if (result.size() != 0) { 
       /*PolygonOptions options = new PolygonOptions() 
         .fillColor(0x330000FF) 
         .strokeColor(Color.BLUE) 
         .strokeWidth(3);*/ 
       for (int i = 0; i < result.size(); i++) { 
        String status = result.get(i).getStatus(); 
        String name = result.get(i).getPersonName(); 
        String email = result.get(i).getPersonMail(); 
        name += "/" + email; 
        Double lat = Double.parseDouble(result.get(i).getLatitude()); 
        Double lng = Double.parseDouble(result.get(i).getLongitude()); 
        if (status.length() > 20) { 
         status = status.substring(0, 20); 
         status += "..."; 
        } 
        LatLng ll = new LatLng(lat, lng); 
        //options.add(ll); 
        MyItem item = new MyItem(lat,lng); 
        clusterManager.addItem(item); 
        map.addMarker(new MarkerOptions().position(ll).title(name).snippet(status)); 
        if (i == 0) { 
         map.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 15)); 
        } 
       } 
       //map.addPolygon(options); 

      } 
     }catch (Exception e){ 
      Toast.makeText(getActivity(),"Internet Connection Error.",Toast.LENGTH_SHORT).show(); 
     } 

我曾嘗試在其他活動這個和它的作品只是下面code.But當我無法實現只在我前面的代碼羣集屬性。

public View onCreateView(final LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 


     View v = inflater.inflate(R.layout.home_map_activity, null, false); 

     mapFrag = (MapFragment) getFragmentManager() 
       .findFragmentById(R.id.map); 
     map = mapFrag.getMap(); 
     map.setMyLocationEnabled(true); 
     map.getUiSettings().setZoomControlsEnabled(true); 
     map.getUiSettings().setCompassEnabled(true); 
     map.getUiSettings().setMyLocationButtonEnabled(true); 
     map.getUiSettings().setAllGesturesEnabled(true); 
     map.setTrafficEnabled(true); 
     map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446),10)); 
     mClusterManager = new ClusterManager<MyItem>(getActivity(), map); 
     map.setOnCameraChangeListener(mClusterManager); 

     drawMarker(); 

     return v; 
    } 

    private void drawMarker() { 
     double lat = 51.5145160; 
     double lng = -0.1270060; 

     // Add ten cluster items in close proximity, for purposes of this example. 
     for (int i = 0; i < 10; i++) { 
      double offset = i/60d; 
      lat = lat + offset; 
      lng = lng + offset; 
      MyItem offsetItem = new MyItem(lat, lng); 
      mClusterManager.addItem(offsetItem); 
     } 
    } 

如何我在以前的代碼信息窗口點擊其他不變實現這個,因爲我不需要任何clustermanager的onclick監聽器?提前致謝。

+0

讓我清楚地知道,您正在將標記聚集在一起,但是當您點擊標記時它什麼也不做,對嗎? – MauriF

回答

1

有幾件事情是錯誤的。

1-您不需要像以前那樣創建標記,只需將「MyItem」添加到集羣管理器就足夠了。

2-標記的標題,片段,位置和任何你想顯示的數據都應該在你的'MyItem'類中。

所以你 'MyItem' 級應該是somethingk這樣的:

public class MyItem implements ClusterItem{ 
private final LatLng position; 
private final String status; 
private final String name; 
private final String email; 

public MyItem(LatLng position2, String status2, String name2, String email2) { 

    position = position2; 
    status = status2; 
    name = name2; 
    email = email2; 

} 

@Override 
public LatLng getPosition() { 
    return position; 
} 
public String getStatus() { 
    return status; 
} 
public String getName() { 
    return name; 
} 
public String getEmail() { 
    return email; 
} 
} 

然後在你的活動創建的項目,如

clusterManager.addItem(new MyItem(......)); 

終於在類,你延長DefaultClusterRenderer < MyItem>

@Override 
    protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) { 
     super.onBeforeClusterItemRendered(item, markerOptions); 

markerOptions.position(item.getPosition()).title(item.getName()).snippet(item.getStatus); 

} 

你會得到相同的之前。

如果您想創建一個自定義信息窗口,它會變得更復雜一點。

+0

我infowindow是自定義..我該怎麼做呢? –

+0

您是否已經嘗試製作自定義信息窗口?給我看一些代碼,我會幫你實現ClusterManager。 – MauriF

相關問題