안드로이드 구글맵 클러스터링 마커 생성이 제대로 안되네요..

조회수 1499회

구글맵에 마커를 생성하고 클러스터링 작업을했습니다.

그리고 ClusterManager.setRenderer를 사용하여 클러스터 마커를 커스텀했습니다.

클러스터링 하기전에는 잘만 생성되던 마커가 클러스터링 한 후에는 바로 보여지지가 않습니다/

처음 구글맵 화면이 보여진뒤에는, 제가 만든 수십개의 마커가 아예 보여지지가 않습니다. 그러나 지도를 축소하면 그때서야 한곳으로 모아진 클러스터 마커는 생깁니다..

그리고나서 그 후에 다시 지도를 확대하면 마커가 보입니다..

왜 처음부터 마커가 보이지 않는 걸까요?

아래 코드는 clusterManager.setRenderer(new MyClusterRenderer(getActivity(), googleMap, clusterManager)); 하기위해 만든 MyClusterRenderer 함수입니다..

public class MyClusterRenderer extends DefaultClusterRenderer<MarkerItem> {

        private final IconGenerator mClusterIconGenerator = new IconGenerator(getActivity().getApplicationContext());

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

        @Override
        protected void onBeforeClusterItemRendered(MarkerItem markerItem, MarkerOptions markerOptions) {
            super.onBeforeClusterItemRendered(markerItem, markerOptions);

            LatLng position = new LatLng(markerItem.getLat(), markerItem.getLon());
            String spotname = markerItem.getSpotname();

            tv_marker.setText(spotname);
            tv_marker.setBackgroundResource(R.drawable.ic_marker_phone);
            tv_marker.setTextColor(Color.BLACK);

            markerOptions.title(spotname);
            markerOptions.position(position);
            markerOptions.icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(getActivity(), marker_root_view)));

        }

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

        @Override
        protected void onBeforeClusterRendered(Cluster<MarkerItem> cluster, MarkerOptions markerOptions){

            final Drawable clusterIcon = getResources().getDrawable(R.drawable.icon);
            clusterIcon.setColorFilter(getResources().getColor(android.R.color.holo_blue_light), PorterDuff.Mode.SRC_ATOP);

            mClusterIconGenerator.setBackground(clusterIcon);

            //    modify padding for one or two digit numbers
            if (cluster.getSize() < 10) {
                mClusterIconGenerator.setContentPadding(30, 10, 0, 0);
            }
            else {
                mClusterIconGenerator.setContentPadding(20, 10, 0, 0);
            }

            Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize()));
            markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));

        }
    }
  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)