google-maps 안드로이드 - Android 용 사용자 정의 InfoWindow 표시 Android 용지도 유틸리티 라이브러리



여러개 다음 (3)

나는 클러스터 맵핑을 만들 수있는 Android 용 Google Maps 유틸리티를 사용하고 있습니다. 사용자 정의 InfoWindow 를 표시해야하지만이 작업을 수행 할 방법을 찾을 수 없습니다. 정보 창을 표시하기 위해 다음 클래스가 있으며 onClusterItemRendered 메소드에서 마커 정보에 액세스 할 수 있습니다.

class MyClusterRenderer extends DefaultClusterRenderer<MarkerItem> {

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

    @Override
    protected void onBeforeClusterItemRendered(MarkerItem item,
            MarkerOptions markerOptions) {
        super.onBeforeClusterItemRendered(item, markerOptions);
        markerOptions.title(String.valueOf(item.getMarkerId()));
    }

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

도서관을 사용하고 Google지도에서 사용되는 방식과 같은 맞춤 InfoWindow 를 표시하는 방법을 알고있는 사람이 있습니까? 처럼:

getMap().setInfoWindowAdapter(new InfoWindowAdapter() {

    @Override
    public View getInfoWindow(Marker arg0) {
        return null;
    }

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

Answers

그래서 기본적으로 클래스는 다음과 같이 시작합니다.

private class MarkerItemClusterRenderer extends
        DefaultClusterRenderer<MarkerItem> {
    public MarkerItemClusterRenderer(Context context, GoogleMap map,
            ClusterManager<MarkerItem> clusterManager) {
    ...

따라서 GoogleMap 유형의 매개 변수 map 에서 setInfoWindowAdapter 를 지정해야합니다.


예, 가능합니다. ClusterManager 는 두 개의 ClusterManager 유지 관리합니다.

  • 하나는 클러스터 마커 용이고
  • 개별 항목 마커 하나

이러한 종류의 각 마커에 대해 개별적으로 InfoWindowAdapter 를 설정할 수 있습니다.

이행

먼저 ClusterManager의 MarkerManager를지도의 InfoWindowAdapter로 설치하십시오.

ClusterManager<MarkerItem> clusterMgr = new ClusterManager<MarkerItem>(context, map);
map.setInfoWindowAdapter(clusterMgr.getMarkerManager());

그런 다음 사용자 정의 InfoWindowAdapter 를 표식 모음 중 하나 또는 모두에 대한 어댑터로 설치하십시오.

clusterMgr.getClusterMarkerCollection().setOnInfoWindowAdapter(new MyCustomAdapterForClusters());
clusterMgr.getMarkerCollection().setOnInfoWindowAdapter(new MyCustomAdapterForItems());

마지막 부분은 사용자 정의 InfoWindowAdapter의 콜백에서받을 원시 Marker 객체를지도에 처음 추가 한 ClusterItem 객체에 매핑하는 것입니다. 이것은 onClusterClick 및 onClusterItemClick 리스너를 사용하여 다음과 같이 수행 할 수 있습니다.

map.setOnMarkerClickListener(clusterMgr);
clusterMgr.setOnClusterClickListener(new OnClusterClickListener<MarkerItem>() {
    @Override
    public boolean onClusterClick(Cluster<MarkerItem> cluster) {
        clickedCluster = cluster; // remember for use later in the Adapter
        return false;
    }
});
clusterMgr.setOnClusterItemClickListener(new OnClusterItemClickListener<MarkerItem>() {
    @Override
    public boolean onClusterItemClick(MarkerItem item) {
        clickedClusterItem = item;
        return false;
    }
});

이제 각 어댑터에서 사용자 정의 InfoWindow 컨텐츠를 어셈블 링하는 데 필요한 모든 것이 있습니다! 예 :

class MyCustomAdapterForClusters implements InfoWindowAdapter {
    @Override
    public View getInfoContents(Marker marker) {
        if (clickedCluster != null) {
            for (MarkerItem item : clickedCluster.getItems()) {
                // Extract data from each item in the cluster as needed
            }
        }
        // build your custom view
        // ...
        return view;
    }
}

나는 대답이있다.

AndroidManifest.xml

이것을 1 행이어야하는 목록에 추가합니다.

xmlns:tools="http://schemas.android.com/tools"

이렇게 보일 것입니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools"
      package="YOUR PACKAGE NAME">

이제이 권한을 제거 할 수 있습니다.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />

따라서 간단한 앱에 대한 내 권한은

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />

SYSTEM.ALERT.WINDOW를 제거하지 마십시오. 개발에 문제가 있습니다.





android google-maps google-maps-android-api-2 markerclusterer