Point startPosition = new Point();
// draw 메서드에서 drawLine()을 이용해 선을 그을것입니다.
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// getProjection().toPixels() 메서드를 이용해서 mOverlays에있는 오버레이 아이템의 좌표를 가져와 위에서 생성한 포인트 객체한테 줍니다.
mapView.getProjection().toPixels(mOverlays.get(0).getPoint(), targetPosition);
mapView.getProjection().toPixels(mOverlays.get(1).getPoint(), startPosition);
Paint paintLine = new Paint(); // 선을 긋기 위한 페인트 생성
paintLine.setARGB(70,255, 0, 0); // 빨강색, 쫌 투명하게 하니깐 보기 좋네
paintLine.setStrokeWidth(2); // 굵기
paintLine.setAntiAlias(true); // 부드럽게 처리.
//선을 긋습니다.
canvas.drawLine(targetPosition.x, targetPosition.y, startPosition.x, startPosition.y, paintLine);
예전에 김다람쥐님 께서 댓글로 남겨주신 글입니다..
여기서 궁금한것이
mapView.getProjection().toPixels(mOverlays.get(0).getPoint(), targetPosition);
mapView.getProjection().toPixels(mOverlays.get(1).getPoint(), startPosition);
이부분인데요.. 이부분에서 오버레이 아이템의 좌표를 가져온다는데.. grt(0) get(1) 이거 같은데..
이해가 잘안되서 ^^; 자세한 설명좀 부탁드릴수있을까요??
만약에 geo 포인트를
List<Overlay> mapOverlays = mapView.getOverlays(); Drawable drawable = this.getResources().getDrawable(R.drawable.marker); MarkItemizedOverlay itemizedOverlay = new MarkItemizedOverlay(drawable,this); GeoPoint point0 = new GeoPoint(lat00, lng00); OverlayItem overlayitem0 = new OverlayItem(point0, null, date0); GeoPoint point1 = new GeoPoint(lat11, lng11); OverlayItem overlayitem1 = new OverlayItem(point1, null, date1); GeoPoint point2 = new GeoPoint(lat22, lng22); OverlayItem overlayitem2 = new OverlayItem(point2, null, date2); GeoPoint point3 = new GeoPoint(lat33, lng33); OverlayItem overlayitem3 = new OverlayItem(point3, null, date3); GeoPoint point4 = new GeoPoint(lat44, lng44); OverlayItem overlayitem4 = new OverlayItem(point4, null, date4); GeoPoint point5 = new GeoPoint(lat55, lng55); OverlayItem overlayitem5 = new OverlayItem(point5, null, date5);이런식으로 되어있다면..
mapView.getProjection().toPixels(mOverlays.get(0).getPoint(), targetPosition);
mapView.getProjection().toPixels(mOverlays.get(1).getPoint(), startPosition);
이부분을 get(point1).getPoint(), startPosition); 이런식으로 해야되는건지.? 답변 꼭좀 부탁드리겠습니다.
맨 처음 리스트가 텅 빈상태에서 add 하면 0번에 추가되는것이고
그 상태에서 또 add 하면 1번에 추가됩니다.
위에서는 서울이 0번 도쿄가 1번이죠.
GPS를 사용할 때에는 정확히 얼마만큼 좌표를 수신할지 모르기때문에 리스트를 사용하였고
곰곰곰곰님처럼 리스트를 사용안하고 직접 좌표를 정해주고 사용하셔도 됩니다.(주로 구글맵만 이용하는경우죠)
제 소스의 경우에는 리스트 0번과 1번의 좌표를 서로 선을 긋는것인데
선을 긋는 것도 마커처럼 맵 위에 그림을 그리는 것이기 때문에 실제 지리상의 위도경도 좌표를 핸드폰 액정의 좌표로 변환해
주는것이 필요합니다.
getProjection().toPixels(지리좌표,포인트) 이 메서드인데요.
파라미터로 지리좌표와 포인트변수를 넣어주면 지리좌표를 알맞게 화면에 표시할 수있게끔 포인터로 바꾸어줍니다.
예를 들어 GeoPoint point0 = new
GeoPoint(lat00, lng00); 이것이 지리좌표이고
Point mpoint = new Point() ; 이것이 포인트라면( 포인트 변수는 자체적으로 x, y를 가지고있습니다. mpoint.x 혹은 mpoint.y 이렇게 따로 사용할 수도있어요)
point0 이것과 mpoint 를 getProjection().toPixels(point0,mpoint) 메서드에 넣으면
사용자가 맵을 움직이면 화면에서의 좌표도 바뀌니까 mpoint는 변하겠지요.
선을 그을때는 바로이 mpoint 끼리 긋는 것입니다.
곰곰곰곰님 소스에서는
mapView.getProjection().toPixels(overlayitem0.getPoint(), targetPosition);
mapView.getProjection().toPixels(overlayitem1.getPoint(), startPosition);
canvas.drawLine(targetPosition.x, targetPosition.y, startPosition.x, startPosition.y, paintLine);
이렇게 해야 선이 그어질 것입니다.
저번에 설명이 부족했었네요.. 제 닉네임은 김다람쥐에서 달토끼로 바꾸었어요. 기분전환도 할겸...
mOverlays는 List<OverlayItem> 로 선언된 리스트 입니다.
자바 리스트 사용법과 동일하게 사용하시면 됩니다.
static List<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
이렇게 전역적으로 static 하게 선언해 주고 사용합니다.
추가되는 항목들은 모두 Point, Title, Snippet 이렇게 3가지 속성을 가지게 됩니다.
예를 들어
mOverlays.add(new OverlayItem(좌표,"서울","대한민국 수도"));
mOverlays.add(new OverlayItem(좌표,"도쿄","일본 수도"));
이렇게 추가해주고