사진이미지 처럼 마커로 파란 원을 사용하여 맵뷰에 띄웠습니다.
이제 마커를 터치하게 되면 onTap이라는 메소드가 반응하는데...
파란원을 터치해도 이벤트가 발생하고 파란원 옆으로 범위그림자가 보이시죠??
범위 경계부분을 터치해도 onTap 이벤트가 발생합니다. ㄷㄷ...
저 파란원 옆에 양재대로 근처에 다른 또 다른 마커가 위치하게 된다고 했을때 원하는 마커 선택이 정말 난감하더라구요;;
저 파란원만 터치 영역으로 하고 싶은데 이거 안드로이드 맵뷰의 한계인가요? 며칠째 검색하고 있는데..
길을 못찾았습니다. 고수님들의 조언을 부탁드립니다. ㅠ.ㅠ
아..어떤 말씀이신지 이해 했습니다. 그런데 제가 마커를 클릭시에 해당마커를 중앙으로 오게 하기 위해
mapview.getController().setCenter(geopoint); 를 onTap(index) 여기에 넣어주었고 setCenter의 geopoint 를 받아오려고
2개의 onTap중 나머지 하나에서 onTap(mapview, geopoint)이녀석이요 이녀석에서 geopoint를 받아서 저녀석을 해주었는데
그럼 geopoint가 필요할때나, onTap(index) 매소드에서 코드로 레이아웃을 전개 시킬때
MapView.LayoutParams params = new MapView.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,item.getPoint(),0,-5,
mapview.addView(linear, params);
같은 경우에는 geoPoint나 mapView를 어디서 받아오는지요 이전 클래스에서 넘겨주어야 하는건가요?
createItem 에서 아마 어레이로 geopoint를 넣었을꺼같은데. 그 어레이의 순번과 ontap의 인덱스를 맞춘다면 (왠만해선 같겠죠)
탭을 클릭할때 지도로부터 지오포인트를 받지 말구 어레이에서 꺼내면될꺼같습니다.즉 onTap(mapview, geopoint) 얘가 필요없게 되겠죠
음..onTap(mapview, geopoint)을 쓰지 않았고 ;; 아예 geopoint를 쓰지 않았는데도 마커를 중심으로 주변원을 그리면서 바깥을 터치해도 이벤트가 발생하네요 ;;
처음
overlayitem = new OverlayItem(new GeoPoint((int)(lat*1E6),(int)(lon*1E6)),name+":"+idx , content);
overlayitem.setMarker(nearDrawable);
이렇게 좌표를 넘겨주는데;; 저렇게 넣어주는게 잘못일까요
마커onTap(index) 이녀석이고 지도는 onTap(mapview, geopoint) 이녀석인데 onTap(mapview, geopoint)를 사용하지 않았는데도 마커 주변을 터치하면 이벤트가 나온다는것이..;; 마커를 터치햇을때 이벤트가 아니고 좌표를 터치했을때 이벤트를 잡는녀석인지 ㅠ.ㅠ 오늘도 헤매게 되네요
글구 마커onTap(index) 이녀석이고 지도는 onTap(mapview, geopoint) 이녀석인데 <-- 이 말이 좀 이해가 안갑니다. itemizedoverlay를 몽땅 보여주신다면 알수도 있을거같긴한데. 저도 초보라 말로는 정확한 이해가 잘안되네요 ㅎ
boolean onTap(GeoPoint p, MapView mapView)
boolean onTap(int index)
위쪽의 onTap 메서드는 아무 위치나 누르기만 하면 호출되므로 표식 바깥에 대한 처리도 할 수 있다. 그러나 지도의 바닥을 눌렀는지 아니면 표식을 눌렀는지 알아 내려면 hitTest 메서드로 영역 판별를 해야 하므로 표식 탭 처리에는 불편하다. 아래쪽의 onTap 메서드는 표식을 눌렀을 때만 호출되며 인수로 눌러진 표식 번호가 전달되므로 표식에 대한 상세 정보를 출력하기에는 훨씬 더 편리하다. 단, 위쪽 메서드가 먼저 호출되는데 이 메서드에서 true를 리턴해 버리면 아래쪽 메서드는 호출되지 않는다.
이부분이에요 ;;
안돼!! 이미지에 공백은 없었네요 ㅠ.ㅠ 하지만 계속 생각해고 있었던건데 hitTest() 이녀석으로 영역을 잡을 수 잇는 것같습니다.
@Override
protected boolean hitTest(OverlayItem item,Drawable marker,int hitX,int hitY) {
if (hitX ==0 && hitY ==0) {
return true;
}
return false;
}
이 매소드를 추가하니 onTap(index) 가 구현되어 있음에도 불구하고 마커나 , 지도의 어느부분을 터치해도 이벤트가 발생하지 않네요 ;;
hitX와 hitY의 수를 키워가면서 적당한 값을 찾아야 할것 같습니다.
SGLEE님 답변감사드립니다.
혹시 저와 비슷한 문제를 겪고 있으신 분들;;
@Override
protected boolean hitTest(OverlayItem item,Drawable marker,int hitX,int hitY) {
if (hitX > -7 && hitX < 7 && hitY < 7 && hitY > -7) {
return true;
}
return false;
}
x와 y의 범위를 적당히 조절하시면 마커의 터치영역을 잡을 수가 있네요 ;; 마커가 겹친다던가 했을때 정확하게 터치 영역을 잡을때 쓰시면 좋게을것 같습니다.




itemizedoverlay로 구현한거라면... ontap 메쏘드가 2가지 있는데 인덱스로 받을경우 마커가 아닌구역은 클릭이 안되고..
geopoint로 받게 되면 지도가 클릭이 됩니다. 둘다 구현했을경우 geopoint로 받은게 우선하기때문에. 생기는 문제인거같네요