Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中为集群标记添加信息窗口?_Android_Google Maps_Infowindow_Markerclusterer - Fatal编程技术网

如何在android中为集群标记添加信息窗口?

如何在android中为集群标记添加信息窗口?,android,google-maps,infowindow,markerclusterer,Android,Google Maps,Infowindow,Markerclusterer,我想显示一个信息窗口,其中包含Android中所有标记的图像。我提到了这个。MyItemClass: 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

我想显示一个信息窗口,其中包含Android中所有标记的图像。我提到了这个。

MyItem
Class:

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

}
Map
活动类:

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) {
        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) {
            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) {
            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) {
        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;
    }
}
公共类映射扩展了FragmentActivity实现
ClusterManager.OnClusterClickListener,
ClusterManager.OnClusterInfoWindowClickListener,
ClusterManager.OnClusterItemClickListener,
ClusterManager.onClusterItemInfo窗口单击侦听器{
私人群集管理器McClusterManager;
私有集群点击集群;
private MyItem Clicked ClusterItem;
@抑制警告(“未选中”)
@凌驾
创建时受保护的void(包arg0){
super.onCreate(arg0);
setContentView(R.layout.map\u视图);
试一试{
//正在从XML初始化映射:
GooglePlayServicesUtil.isGooglePlayServicesAvailable(Map.this);
SupportMapFragment MapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.mMapView);
mMapView=mapFrag.getMap();
mMapView.setMapType(GoogleMap.MAP\u TYPE\u NORMAL);
mMapView.getUiSettings().setZoomControlsEnabled(true);
mMapView.getUiSettings().setCompassEnabled(true);
mMapView.getUiSettings().setMyLocationButtonEnabled(true);
mMapView.getUiSettings().setRotategestureEnabled(true);
mMapView.getUiSettings().setScrollGesturesEnabled(true);
mMapView.getUiSettings().setTiltGesturesEnabled(true);
mMapView.getUiSettings().setZoomGesturesEnabled(true);
mMapView.setMyLocationEnabled(true);
}捕获(例外e){
mMapFrame.setVisibility(View.GONE);
Utils.displaytoos(“您的设备不支持谷歌地图”,Map.this);
}
//正在创建群集管理器对象。
mClusterManager=newclustermanager(Map.this,mMapView);
mMapView.SetonCamerachenglistener(McClusterManager);
setRenderer(新的MyClusterRenderer(Map.this、mMapView、,
mClusterManager);
mMapView.setOnInfoWindowClickListener(McClusterManager);
mMapView.setInfoWindowAdapter(mClusterManager.getMarkerManager());
McClusterManager.getClusterMarkerCollection().setOnInfoWindowAdapter(
新MyCustomAdapterForClusters());
McClusterManager.getMarkerCollection().setOnInfoWindowAdapter(
新MyCustomAdapterForItems());
mMapView.setOnMarkerClickListener(mClusterManager);
setOnClusterClickListener(此);
mClusterManager.setOnClusterInfoWindowClickListener(这个);
mClusterManager.setOnClusterItemClickListener(此);
mClusterManager.setOnClusterItemInfoWindowClickListener(此);
McClusterManager
.setOnClusterClickListener(新的OnClusterClickListener(){
@凌驾
公共布尔onClusterClick(集群){
单击群集=群集;
返回false;
}
});
McClusterManager
.setOnClusterItemClickListener(新的OnClusterItemClickListener(){
@凌驾
公共布尔onClusterItemClick(MyItem){
单击ClusterItem=项目;
返回false;
}
});
//将对象添加到集群。
mClusterManager.addItem(mItemData);
mMapView.animateCamera(CameraUpdateFactory
.newLatLngZoom(mLatLng,7));
mClusterManager.cluster();
}
类MyClusterRenderer扩展了DefaultClusterRenderer{
公共MyClusterRenderer(上下文、谷歌地图、,
群集管理器(群集管理器){
超级(上下文、地图、群集管理器);
}
@凌驾
在呈现BeforeClusterItem(MyItem,
标记选项(标记选项){
super.onBeforeClusterItemRendered(项目、标记选项);
}
@凌驾
受保护的void onClusterItemRendered(MyItem clusterItem、Marker){
super.onClusterItemRendered(聚类项目、标记);
}
}
//自定义适配器信息视图:
公共类MyCustomAdapterForItems实现InfoWindowAdapter{
私有最终视图myContentsView;
MyCustomAdapterForItems(){
myContentsView=GetLayoutFlater()。充气(
R.layout.map\u信息\u窗口\u对话框,空);
}
@凌驾
公共视图getInfoContents(标记器){
返回null;
}
@凌驾
公共视图getInfoWindow(标记器){
TextView tvTitle=((TextView)myContentsView
.findViewById(R.id.txtHeader));
TextView tvSnippet=((TextView)myContentsView
.findViewById(R.id.txtAddress));
tvTitle.setTypeface(mTyFaceKreonBold);
tvSnippet.setTypeface(mTyFaceKreonBold);
如果(clickedClusterItem!=null){
tvTitle.setText(clickedClusterItem.getmStoreName());
tvSnippet.setText(单击clusterItem.getmAddressOne());
}
返回myContentsView;
}
}
//类用于主群集。
公共类MyCustomAdapterForClusters实现InfoWindowAdapter{
私有最终视图myContentsView;
MyCustomAdapterForClusters(){
myContentsView=GetLayoutFlater()。充气(
R.layout.map\u信息\u窗口\u对话框,空);
}
@凌驾
公共视图getInfoContents(标记器){
返回null;
}
@凌驾
公共视图getInfoWindow(标记器){
TextView tvTitle=((TextView)myContent