마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android java 구글 맵 MapClick 질문 드립니다

0 추천

현재 주유소들을 구글맵에 마커 찍어준 상황에서 마커를 클릭하면 마커좌표의 가운데로 가도록 해놓고 맵을 클릭하면 마커가 해제된 것 처럼 작업해놨습니다. 그런데 맵을 클릭하면 마커를 클릭안 해도 가장 가까운 마커가 선택되고 거기로 카메라가 이동합니다... 도와주세요

public void onMapClick(LatLng latLng) {
        changeSelectedMarker(null);

        ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) cl_carBookMap_showList.getLayoutParams();
        layoutParams.setMargins(0,0,0,Math.round(Utils.convertDpToPixel(66)));
    }
public boolean onMarkerClick(Marker marker) {

        CameraUpdate center = CameraUpdateFactory.newLatLng(marker.getPosition());
        googleMap.animateCamera(center);

        ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) cl_carBookMap_showList.getLayoutParams();
        layoutParams.setMargins(0,0,0,Math.round(Utils.convertDpToPixel(22)));

        changeSelectedMarker(marker);
        return true;
    }
private void changeSelectedMarker(Marker marker) {
        // 선택했던 마커 되돌리기
        if (selectedMarker != null) {
            addMarker(selectedMarker, false);
            selectedMarker.remove();
        }

        // 선택한 마커 표시
        if (marker != null) {
            selectedMarker = addMarker(marker, true);
            marker.remove();
        }
    }

 

jay_choi (530 포인트) 님이 2023년 2월 7일 질문

1개의 답변

0 추천

코드를 실행해 보지는 않아서 정확하지는 않습니다만, changeSelectedMarker에서 왜 maker.remove를 호출하는지 정확하게 이해가 가지 않네요. 코드를 좀 더 읽기 쉽게 하기 위하여 마커를 해제하는 부분과 추가하는 부분을 따로 나누어서 작성해 보았습니다.

public void onMapClick(LatLng latLng) {
        removeSelectedMarker();
 
        ....
}

private void removeSelectedMarker() {
    if (selectedMarker == null) return

     addMarker(selectedMarker, false);
     selectedMarker.remove();
     // selectedMarker = null;  // 혹 null 설정하는 코드가 필요한가요?
}

public boolean onMarkerClick(Marker marker) {
        ...
 
        addSelectedMarker(marker);
        return true;
}


private void addSelectedMarker(Marker marker) {
       val optMarker = Objects.requireNonNull(marker);
       selectedMarker = addMarker(optMarker, true);
       // marker.remove(); // 이 부분이 없어야 마커가 선택되지 않나요?
}

marker.remove() 가 없어야 마커를 선택하는 동작이 제대로 실행이 될 것 같아 보이는데요.

 

spark (227,830 포인트) 님이 2023년 2월 8일 답변
spark님이 2023년 2월 8일 수정
...