답변

24

MyItem 클래스

import com.google.android.gms.maps.model.LatLng; 
import com.google.maps.android.clustering.ClusterItem; 

public class MyItem implements ClusterItem { 

private LatLng mPosition; 
private String mLatitude = ""; 
private String mStoreLogo = ""; 
private String mLongitude = ""; 

@Override 
public LatLng getPosition() { 
    return mPosition; 
} 

public void setPosition(LatLng mPosition) { 
    this.mPosition = mPosition; 
} 

public LatLng getmPosition() { 
    return mPosition; 
} 

public void setmPosition(LatLng mPosition) { 
    this.mPosition = mPosition; 
} 


public String getmLatitude() { 
    return mLatitude; 
} 

public void setmLatitude(String mLatitude) { 
    this.mLatitude = mLatitude; 
} 

public String getmLongitude() { 
    return mLongitude; 
} 

public void setmLongitude(String mLongitude) { 
    this.mLongitude = mLongitude; 
} 

public String getmStoreLogo() { 
    return mStoreLogo; 
} 

public void setmStoreLogo(String mStoreLogo) { 
    this.mStoreLogo = mStoreLogo; 
} 

} 

YourActivity 클래스 :

public class Map extends FragmentActivity implements 
     ClusterManager.OnClusterClickListener<MyItem>, 
     ClusterManager.OnClusterInfoWindowClickListener<MyItem>, 
     ClusterManager.OnClusterItemClickListener<MyItem>, 
     ClusterManager.OnClusterItemInfoWindowClickListener<MyItem> { 


    private ClusterManager<MyItem> mClusterManager; 
    private Cluster<MyItem> clickedCluster; 
    private MyItem clickedClusterItem; 


     @SuppressWarnings("unchecked") 
    @Override 
    protected void onCreate(Bundle arg0) { 
     // TODO Auto-generated method stub 
     super.onCreate(arg0); 
     setContentView(R.layout.map_view); 

    try { 

      // Initializing Map from XML : 

      GooglePlayServicesUtil.isGooglePlayServicesAvailable(Map.this); 
      SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager() 
        .findFragmentById(R.id.mMapView); 

      mMapView = mapFrag.getMap(); 
      mMapView.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
      mMapView.getUiSettings().setZoomControlsEnabled(true); 
      mMapView.getUiSettings().setCompassEnabled(true); 
      mMapView.getUiSettings().setMyLocationButtonEnabled(true); 
      mMapView.getUiSettings().setRotateGesturesEnabled(true); 
      mMapView.getUiSettings().setScrollGesturesEnabled(true); 
      mMapView.getUiSettings().setTiltGesturesEnabled(true); 
      mMapView.getUiSettings().setZoomGesturesEnabled(true); 
      mMapView.setMyLocationEnabled(true); 

     } catch (Exception e) { 
      mMapFrame.setVisibility(View.GONE); 
      Utils.displayToast("Your device doesn't support Google Map", 
        Map.this); 
     } 

    // Creating cluster manager object. 

    mClusterManager = new ClusterManager<MyItem>(Map.this, mMapView); 
     mMapView.setOnCameraChangeListener(mClusterManager); 
     mClusterManager.setRenderer(new MyClusterRenderer(Map.this, mMapView, 
       mClusterManager)); 

     mMapView.setOnInfoWindowClickListener(mClusterManager); 
     mMapView.setInfoWindowAdapter(mClusterManager.getMarkerManager()); 
     mClusterManager.getClusterMarkerCollection().setOnInfoWindowAdapter(
       new MyCustomAdapterForClusters()); 
     mClusterManager.getMarkerCollection().setOnInfoWindowAdapter(
       new MyCustomAdapterForItems()); 
     mMapView.setOnMarkerClickListener(mClusterManager); 
     mClusterManager.setOnClusterClickListener(this); 
     mClusterManager.setOnClusterInfoWindowClickListener(this); 
     mClusterManager.setOnClusterItemClickListener(this); 
     mClusterManager.setOnClusterItemInfoWindowClickListener(this); 

     mClusterManager 
       .setOnClusterClickListener(new OnClusterClickListener<MyItem>() { 
        @Override 
        public boolean onClusterClick(Cluster<MyItem> cluster) { 
         clickedCluster = cluster; 
         return false; 
        } 
       }); 

     mClusterManager 
       .setOnClusterItemClickListener(new OnClusterItemClickListener<MyItem>() { 
        @Override 
        public boolean onClusterItemClick(MyItem item) { 
         clickedClusterItem = item; 
         return false; 
        } 
       }); 

     Adding Objects to the Cluster.  

     mClusterManager.addItem(mItemData); 
         mMapView.animateCamera(CameraUpdateFactory 
           .newLatLngZoom(mLatLng, 7)); 
     mClusterManager.cluster(); 
} 




    class MyClusterRenderer extends DefaultClusterRenderer<MyItem> { 

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

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

     @Override 
     protected void onClusterItemRendered(MyItem clusterItem, Marker marker) { 
      super.onClusterItemRendered(clusterItem, marker); 
     } 
    } 

    // Custom adapter info view : 

    public class MyCustomAdapterForItems implements InfoWindowAdapter { 

     private final View myContentsView; 

     MyCustomAdapterForItems() { 
      myContentsView = getLayoutInflater().inflate(
        R.layout.map_info_window_dialog, null); 
     } 

     @Override 
     public View getInfoContents(Marker marker) { 
      return null; 
     } 

     @Override 
     public View getInfoWindow(Marker marker) { 
      // TODO Auto-generated method stub 


      TextView tvTitle = ((TextView) myContentsView 
        .findViewById(R.id.txtHeader)); 
      TextView tvSnippet = ((TextView) myContentsView 
        .findViewById(R.id.txtAddress)); 

      tvTitle.setTypeface(mTyFaceKreonBold); 
      tvSnippet.setTypeface(mTyFaceKreonBold); 
      if (clickedClusterItem != null) { 
       tvTitle.setText(clickedClusterItem.getmStoreName()); 
       tvSnippet.setText(clickedClusterItem.getmAddressOne()); 

      } 
      return myContentsView; 
     } 
    } 
    // class for Main Clusters.  

    public class MyCustomAdapterForClusters implements InfoWindowAdapter { 

     private final View myContentsView; 

     MyCustomAdapterForClusters() { 
      myContentsView = getLayoutInflater().inflate(
        R.layout.map_info_window_dialog, null); 
     } 

     @Override 
     public View getInfoContents(Marker marker) { 
      return null; 
     } 

     @Override 
     public View getInfoWindow(Marker marker) { 
      // TODO Auto-generated method stub 


      TextView tvTitle = ((TextView) myContentsView 
        .findViewById(R.id.txtHeader)); 
      TextView tvSnippet = ((TextView) myContentsView 
        .findViewById(R.id.txtAddress)); 
      tvSnippet.setVisibility(View.GONE); 
      tvTitle.setTypeface(mTyFaceKreonBold); 
      tvSnippet.setTypeface(mTyFaceKreonBold); 


      if (clickedCluster != null) { 
       tvTitle.setText(String 
         .valueOf(clickedCluster.getItems().size()) 
         + " more offers available"); 
      } 
      return myContentsView; 
     } 
    } 

    @Override 
    public void onClusterItemInfoWindowClick(MyItem item) { 
     // TODO Auto-generated method stub 

     Intent intent = new Intent(Map.this,NextActivity.class); 
     intent.putExtra("mLatitude", item.getmLatitude()); 
     intent.putExtra("mLongitude", item.getmLongitude()); 

     startActivity(intent); 
     finish(); 
    } 

    @Override 
    public boolean onClusterItemClick(MyItem item) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void onClusterInfoWindowClick(Cluster<MyItem> cluster) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public boolean onClusterClick(Cluster<MyItem> cluster) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    } 
    } 

코드는 자명하다. Hooe를 사용하여 클러스터 라이브러리 및 Google Play 서비스 라이브러리를 빌드 경로에 추가했습니다. 문의 사항이 있으면 알려주십시오.

+0

정보 창이 표시되지 않습니다 ... 어디에 특정 마커에 대한 정보창을 설정하세요 ... – Deva

+0

@Deva 친절하게 표시 하시겠습니까? 항목을 클러스터에 추가 하시겠습니까? –

+0

private void readItems() throws JSONException { \t // InputStream inputStream = getResources(). openRawResource (R.raw.radar_search); \t // 목록 items = new MyItemReader(). read (inputStream); \t \t \t \t \t \t Log.e ("항목 크기", ""+ items.size()); \t \t \t Log.e ("items", "+ items); \t mClusterManager.addItems (items); \t \t \t map.animateCamera (CameraUpdateFactory .newLatLngZoom (items.get (0) .getPosition(), 7)); \t \t mClusterManager.cluster(); \t} – Deva

관련 문제