티스토리 뷰
구글 맵에서 마커를 표시하고 해당 마커에 대해 터치 이벤트를 설정해 보도록 하겠습니다.
안드로이드사이드의 [pjs님강좌] MapView 이용하기 5 - onTab() 사용 를 참조하였습니다.
mainfest 설정, key 값 받기 등은 생략하도록 하겠습니다.
우선, 마커 설정을 위해 res의 drawable에 androidmarker.png를 추가시킵니다.
<main.xml>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="이 부분에 key값을 입력합니다"
/>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="이 부분에 key값을 입력합니다"
/>
</RelativeLayout>
<HelloMyMap.java>
package my.HelloMyMap;
import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
public class HelloMyMap extends MapActivity {
private List<Overlay> mapOverlays;
private Drawable drawable;
private HellItemizedOverlay itemizedOverlay;
private MapView mapView;
private MapController mc;
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView)findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(true);
mc = mapView.getController();
mc.animateTo(new GeoPoint(37517180,127041268));
mc.setZoom(17);
mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.androidmarker);
itemizedOverlay = new HellItemizedOverlay(drawable, this);
OverlayItem overlayitem1 =
itemizedOverlay.addOverlay(overlayitem1);
itemizedOverlay.addOverlay(overlayitem2);
mapOverlays.add(itemizedOverlay);
}
}
import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
public class HelloMyMap extends MapActivity {
private List<Overlay> mapOverlays;
private Drawable drawable;
private HellItemizedOverlay itemizedOverlay;
private MapView mapView;
private MapController mc;
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView)findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(true);
mc = mapView.getController();
mc.animateTo(new GeoPoint(37517180,127041268));
mc.setZoom(17);
mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.androidmarker);
itemizedOverlay = new HellItemizedOverlay(drawable, this);
OverlayItem overlayitem1 =
new OverlayItem(new GeoPoint(37517180,127041268), "ㅋ","강남구청");
OverlayItem overlayitem2 =
new OverlayItem(new GeoPoint(37517180,127035000), "ㅋㅋ","Apod");
itemizedOverlay.addOverlay(overlayitem1);
itemizedOverlay.addOverlay(overlayitem2);
mapOverlays.add(itemizedOverlay);
}
}
<HelloItemizedOverlay.java>
package my.HelloMyMap;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.Toast;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
public class HellItemizedOverlay extends ItemizedOverlay {
private Context mContext;
private ArrayList<OverlayItem> mOverlays
= new ArrayList<OverlayItem>();
public HellItemizedOverlay(Drawable defaultMarker, Context context) {
super(boundCenterBottom(defaultMarker));
// TODO Auto-generated constructor stub
mContext = context;
}
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return mOverlays.get(i);
}
@Override
public int size() {
// TODO Auto-generated method stub
return mOverlays.size();
}
public void addOverlay(OverlayItem overlay)
{
mOverlays.add(overlay);
populate();
}
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
Toast.makeText
(mContext, item.getSnippet(), Toast.LENGTH_LONG).show();
return true;
}
}
import java.util.ArrayList;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.Toast;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
public class HellItemizedOverlay extends ItemizedOverlay {
private Context mContext;
private ArrayList<OverlayItem> mOverlays
= new ArrayList<OverlayItem>();
public HellItemizedOverlay(Drawable defaultMarker, Context context) {
super(boundCenterBottom(defaultMarker));
// TODO Auto-generated constructor stub
mContext = context;
}
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return mOverlays.get(i);
}
@Override
public int size() {
// TODO Auto-generated method stub
return mOverlays.size();
}
public void addOverlay(OverlayItem overlay)
{
mOverlays.add(overlay);
populate();
}
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
Toast.makeText
(mContext, item.getSnippet(), Toast.LENGTH_LONG).show();
return true;
}
}
HelloMyMap.java 에서는 Map에 관한 전반적인 부분을 보여주고 있구요.
OverlayItem 형태의 객체를 선언해 줍니다.
첫 번째 인자는 좌표 값이구요,
두 번째 인자는 string형태의 title,
세 번째 인자는 string snippet입니다.
OverlayItem overlayitem1 =
new OverlayItem(new GeoPoint(37517180,127041268), "ㅋ","강남구청");
OverlayItem overlayitem2 =
new
OverlayItem(new GeoPoint(37517180,127035000), "ㅋㅋ","Apod");
HelloItemizedOverlay 형태의 itemizedOverlay를 이용해서 위의 OverlayItem을 추가해 줍니다.
itemizedOverlay.addOverlay(overlayitem1);
itemizedOverlay.addOverlay(overlayitem2);
mapOverlays.add(itemizedOverlay);
itemizedOverlay.addOverlay(overlayitem2);
mapOverlays.add(itemizedOverlay);
HelloItemizedOverlay.java에서는 OverlayItem들을 관리해 줍니다.
OverlayItem의 ArrayList형태로 overlayItem을 관리합니다.
private ArrayList<OverlayItem>
mOverlays
= new ArrayList<OverlayItem>();
= new ArrayList<OverlayItem>();
OnTap() 메소드는 마커를 클릭 시 발생하는 이벤트에 대한 핸들러 입니다.
위 소스에서는 Toast로 snippet값을 보여주게 됩니다.
snippet은 HelloMyMap.java에서 OverlayItem 선언 시 세 번째 인자로 넣은 값입니다.
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
Toast.makeText
(mContext, item.getSnippet(), Toast.LENGTH_LONG).show();
return true;
}
OverlayItem item = mOverlays.get(index);
Toast.makeText
(mContext, item.getSnippet(), Toast.LENGTH_LONG).show();
return true;
}
아래는 실행화면 입니다~
'기타 > Android' 카테고리의 다른 글
[Android] 생성한 DB 내용 확인하기 (1) | 2010.09.04 |
---|---|
[Android] Content Provider의 이해 (2) | 2010.08.17 |
[Android]GeoPoint로 날씨정보 가져오기 (12) | 2010.07.18 |
[Android/iPhone]미래는 x-Platform이다? (0) | 2010.07.05 |
[Android/공모전]똑똑한 지구를 위한 어플리케이션 공모전 (0) | 2010.06.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 대학원
- 리눅스
- 운영체제
- 카타르 음주
- 데이터 사이언스
- operating systems
- 안드로이드
- 데이터 과학
- 통계학습
- statistical learning
- 자료구조
- Data Structure
- 개발
- 머신러닝
- Reverse Engineering
- 리버싱
- java
- Algorithms
- Machine Learning
- Discrete Mathematics
- 리버스엔지니어링
- 자바
- android
- reversing
- 카타르
- 이산수학
- 알고리즘
- 기계학습
- Data Science
- linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함