Google Map 예제, 지도상의 터치된 곳에 이미지 출력하기
Google MapView 와 MapActivity 를 이용한 화면에서 이용자가 지도상의 특정 위치를 터치하면 해당 위치에 화살표 그리기
package test.android.hello;
import java.util.*;
import android.graphics.*;
import android.os.Bundle;
import android.view.*;
import com.google.android.maps.*;
public class GoogleMapActivity extends MapActivity {
MapView mapView;
MapController mapController;
GeoPoint p;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_layout);
mapView = (MapView) findViewById(R.id.mapview);
mapView.displayZoomControls(true);
mapController = mapView.getController();
// 37517180, 127041268 강남구청
String coordinates[] = {"37.517180", "127.041268"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint((int)(lat*1E6), (int)(lng*1E6));
mapController.animateTo(p);
mapController.setZoom(17);
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
}
@Override
protected boolean isRouteDisplayed() {
return true;
}
class MapOverlay extends com.google.android.maps.Overlay
{
@Override
public boolean draw(Canvas canvas, MapView mapView,
boolean shadow, long when) {
super.draw(canvas, mapView, shadow);
//지리좌표를 화면픽셀좌표로 변환
Point screenPts = new Point();
mapView.getProjection().toPixels(p, screenPts);
//위에서 변환한 화면좌표에 화살표 이미지를 그려준다
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.arrow);
Paint paint = new Paint();
paint.setAlpha(60);
canvas.drawBitmap(bmp, screenPts.x-bmp.getWidth()/2, screenPts.y, paint);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
if (event.getAction() == event.ACTION_UP) {
// 터치된 화면의 좌표를 지리좌표로 변환한다
GeoPoint touchGP = mapView.getProjection().fromPixels(
(int)event.getX(),
(int)event.getY());
//android.util.Log.e("터치 이벤트", "위도:"+touchGP.getLatitudeE6()+", 경도:"+touchGP.getLongitudeE6());
p = touchGP;
return false;
}
else return false;
}
}
}