2015-01-02 18 views
6

tôi đã hoạt động này:Cách thêm tiêu đề, đoạn mã và biểu tượng vào ClusterItem?

public class MapViewer extends Activity { 

    private GoogleMap map; 
    private Database db = new Database(this); 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mapviewer); 

     try { 
      map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
      if (map != null) { 
       map.setMyLocationEnabled(true); 
       map.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
       map.getUiSettings().setRotateGesturesEnabled(false); 

       this.addMerchantMarkers(new MarkerOptions()); 
      } 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void addMerchantMarkers(MarkerOptions mo) { 
     SQLiteDatabase dbRead = db.getReadableDatabase(); 
     Cursor result = dbRead.rawQuery("SELECT title, addr, lat, lon FROM users", null); 

     while(result.moveToNext()) {    
      map.addMarker(mo.position(new LatLng(result.getFloat(2), result.getFloat(3))) 
        .title(result.getString(0)) 
        .snippet(result.getString(1)) 
        );; 
     } 
    } 
} 

mà tôi đã thay đổi theo cách sau để sử dụng các marker phân nhóm:

public class MapViewer extends Activity { 

    private GoogleMap map; 
    private Database db = new Database(this); 
    private ClusterManager<MyItem> mClusterManager; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mapviewer); 

     try { 
      map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
      if (map != null) { 
       map.setMyLocationEnabled(true); 
       map.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
       map.getUiSettings().setRotateGesturesEnabled(false); 

       setUpClusterer(); 
      } 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } 
    } 

    private void setUpClusterer() { 
     mClusterManager = new ClusterManager<MyItem>(this, map); 

     map.setOnCameraChangeListener(mClusterManager); 
     map.setOnMarkerClickListener(mClusterManager); 

     addItems(); 
    } 

    private void addItems() { 
     SQLiteDatabase dbRead = db.getReadableDatabase(); 
     Cursor result = dbRead.rawQuery("SELECT lat, lon, title, addr FROM users", null); 

     while(result.moveToNext()) { 
      MyItem offsetItem = new MyItem(result.getFloat(0), result.getFloat(1)); 
      mClusterManager.addItem(offsetItem); 
     } 
    } 
} 

Bây giờ tôi không biết làm thế nào để thêm tiêu đề, đoạn mã và biểu tượng để mỗi điểm đánh dấu như mã trước. Bây giờ nếu tôi nhấp vào một điểm đánh dấu không có gì xảy ra ... Làm thế nào để có được điều đó?

Trả lời

39

Tại đây bạn nên làm việc với ClusterManager. Ví dụ, đặt trên mục cụm click:

 mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<MyItem>() { 
      @Override 
      public boolean onClusterItemClick(MyItem item) { 
       //put your code here 
       return false; 
      } 
     }); 

Và có những phương pháp khác nhau khác trong lớp ClusterManager. Bạn sẽ cần một mã ít rõ ràng để gán cửa sổ thông tin để đánh dấu hoặc cụm - bạn nên sử dụng mã này:

mClusterManager.getMarkerCollection().setOnInfoWindowAdapter(new MarkerInfoWindowAdapter()); 
mClusterManager.getClusterMarkerCollection().setOnInfoWindowAdapter(new ClusterInfoWindow()); 

Có MarkerInfoWindowAdapter và ClusterWindowAdapter là lớp học của bạn, mà thực hiện GoogleMap.InfoWindowAdapter.

Với các biểu tượng khó hơn một chút, vì việc nhóm thay đổi biểu tượng thành mặc định. Bạn nên sử dụng phương pháp:

public void setRenderer(com.google.maps.android.clustering.view.ClusterRenderer<T> view) 

Bạn có thể lớp trình kết xuất của riêng mình và ghi đè một số phương pháp. Ví dụ, để thiết lập tùy chỉnh các biểu tượng sử dụng một lớp như:

class OwnIconRendered extends DefaultClusterRenderer<MyItem> { 

    public OwnIconRendered(Context context, GoogleMap map, 
          ClusterManager<MyItem> clusterManager) { 
     super(context, map, clusterManager); 
    } 

    @Override 
    protected void onBeforeClusterItemRendered(MyItem item, MarkerOptions markerOptions) { 
     markerOptions.icon(item.getIcon()); 
     markerOptions.snippet(item.getSnippet()); 
     markerOptions.title(item.getTitle()); 
     super.onBeforeClusterItemRendered(item, markerOptions); 
    } 
} 

Và sử dụng nó theo cách như vậy:

mClusterManager.setRenderer(new OwnIconRendered(activity.getApplicationContext(), getMap(), mClusterManager)); 
+0

Nevermind về biểu tượng. Bạn có một số ví dụ cho thấy cách thêm tiêu đề và đoạn trích vào các điểm đánh dấu nằm trong các cụm không? – smartmouse

+2

Bạn có thể thêm tiêu đề và đoạn mã theo cùng cách với biểu tượng - trong phương thức onBeforeClusterRendered (xem câu trả lời) sử dụng tiêu đề phương thức (Tiêu đề chuỗi) và đoạn trích (Đoạn mã) của đối tượng markerOptions. –

+0

Đã làm việc, cảm ơn bạn. – smartmouse

Các vấn đề liên quan