Di bagian ini, kita naik satu tingkat lagi dengan menggabungkan 2 project sebelumnya ditambah menampilkan sebuah marker atau pin sebagai tKamu suatu tempat, dengan demikian kita menggabungkan 3 dasar
Ups, tapi sabar dulu..! sebelumnya kita bicara scenarionya dulu. Begitu dijalankan, bersamaan dengan menampilkan map, muncul juga sebuah marker atau pin pada lokasi tertentu. Dalam hal ini defaultnya marker berada di atas kota Yogyakarta. Begitu GPS menangkap latidude dan longitude yang baru ( disimulasikan dengan mengirim lokasi melalui DDMS), maka marker akan berpindah ke lokasi baru, diikuti animasi sederhana map bergeser mengikuti marker sekaligus melakukan zoom. Perhatikan Gambar 15.1.
1. Bikin project baru lagi
2. Masukkan gambar marker/pin ke drawable
3. Main.xml
4. userPosition
5. Bikin dulu class baru CustomItemizedOverlay.java
6. Tulis kode Activity MapMarker seperti ini
Seteleah tidak ada error, coba di run. Wow!! Android memang luar biasa!
Sumber: omayib.com
- Menampilkan map
- Menentukan lokasi dari gps
- Member tKamu lokasi kita dengan sebuah marker.
Ups, tapi sabar dulu..! sebelumnya kita bicara scenarionya dulu. Begitu dijalankan, bersamaan dengan menampilkan map, muncul juga sebuah marker atau pin pada lokasi tertentu. Dalam hal ini defaultnya marker berada di atas kota Yogyakarta. Begitu GPS menangkap latidude dan longitude yang baru ( disimulasikan dengan mengirim lokasi melalui DDMS), maka marker akan berpindah ke lokasi baru, diikuti animasi sederhana map bergeser mengikuti marker sekaligus melakukan zoom. Perhatikan Gambar 15.1.
| Gambar 15.1. Kombinasi map, marker dan GPS ,(a) DDMS untuk emulator GPS, (b) Map dan markernya |
1. Bikin project baru lagi
Project name | mapMarkerGps |
Build Target | Android 2.2 |
Aplication name | Google Map |
Package name | Com.map.marker |
Create Activity | MapMarker |
Min SDK version | 8 |
2. Masukkan gambar marker/pin ke drawable
3. Main.xml
1: <?xml version="1.0" encoding="utf-8"?>
2: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
4: android:orientation="vertical"
5: android:layout_width="fill_parent"
6: android:layout_height="fill_parent">
7:
8: <com.google.android.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android"
10: android:id="@+id/map_view"
11: android:layout_width="fill_parent"
12: android:layout_height="fill_parent"
13: android:clickable="true"
14: android:enabled="true"
15: android:apiKey="0CyuBP8zNhMbsh0kiDX7go-37s8g81rYQQoldrQ" />
16: </RelativeLayout>
17:
4. userPosition
1: package com.map.marker;
2:
3: public class userPosition {
4: static double latitude;
5: static double longitude;
6:
7: public double getLatitude() {
8: return latitude;
9: }
10:
11: public double getLongitude() {
12: return longitude;
13: }
14: public void setLatitude(double latitude) {
15: userPosition.latitude = latitude;
16: }
17: public void setLongitude(double longitude) {
18: userPosition.longitude = longitude;
19: }
20: }
21:
5. Bikin dulu class baru CustomItemizedOverlay.java
1: package com.map.marker;
2:
3: import java.util.ArrayList;
4:
5: import android.app.AlertDialog;
6: import android.content.Context;
7: import android.graphics.drawable.Drawable;
8:
9: import com.google.android.maps.ItemizedOverlay;
10: import com.google.android.maps.OverlayItem;
11:
12: public class CustomItemizedOverlay extends
13: ItemizedOverlay<OverlayItem> {
14:
15: private ArrayList<OverlayItem> mapOverlays = new
16: ArrayList<OverlayItem>();
17:
18: private Context context;
19:
20: public CustomItemizedOverlay(Drawable defaultMarker) {
21: super(boundCenterBottom(defaultMarker));
22: // TODO Auto-generated constructor stub
23: }
24:
25: public CustomItemizedOverlay(Drawable defaultMarker, Context
26: context) {
27: this(defaultMarker);
28: this.context = context;
29: }
30:
31: @Override
32: protected OverlayItem createItem(int i) {
33: // TODO Auto-generated method stub
34: return mapOverlays.get(i);
35: }
36:
37: @Override
38: public int size() {
39: // TODO Auto-generated method stub
40: return mapOverlays.size();
41: }
42:
43: @Override
44: protected boolean onTap(int index) {
45: OverlayItem item = mapOverlays.get(index);
46: AlertDialog.Builder ad = new AlertDialog.Builder(context);
47: ad.setTitle(item.getTitle());
48: ad.setMessage(item.getSnippet());
49: ad.show();
50: return true;
51: }
52:
53: public void addOverlay(OverlayItem overlay) {
54: mapOverlays.add(overlay);
55: this.populate();
56: }
57: }
58:
6. Tulis kode Activity MapMarker seperti ini
1: package com.map.marker;
2:
3: import java.util.List;
4:
5: import com.google.android.maps.GeoPoint;
6: import com.google.android.maps.MapActivity;
7: import com.google.android.maps.MapController;
8: import com.google.android.maps.MapView;
9: import com.google.android.maps.Overlay;
10: import com.google.android.maps.OverlayItem;
11: import android.content.Context;
12: import android.location.Location;
13: import android.location.LocationListener;
14: import android.location.LocationManager;
15: import android.os.Bundle;
16: import android.widget.Toast;
17:
18: public class MapMarker extends MapActivity {
19:
20: private MapView mapView;
21: MapController mapController;
22: LocationListener locationListener;
23: CustomItemizedOverlay itemizedOverlay;
24: List<Overlay> mapOverlays;
25: userPosition pos;
26:
27: /** Called when the activity is first created. */
28: @Override
29: public void onCreate(Bundle savedInstanceState) {
30: super.onCreate(savedInstanceState);
31: setContentView(R.layout.main);
32:
33: mapView = (MapView) findViewById(R.id.map_view);
34: mapView.setBuiltInZoomControls(true);
35: mapOverlays = mapView.getOverlays();
36: mapController = mapView.getController();
37: pos = new userPosition();
38:
39: LocationManager mLocationManager = (LocationManager)
40: getSystemService(Context.LOCATION_SERVICE);
41: locationListener = new MyLocationListener();
42: mLocationManager.requestLocationUpdates
43: (LocationManager.GPS_PROVIDER,0,
44: 0, locationListener);
45:
46: if (pos.getLatitude() > 0) {
47: getGeoPointUser(pos.getLatitude(),
48: pos.getLongitude());
49:
50: } else {
51: getGeoPointUser(-7.801307, 110.364756);//yogya
52: }
53: }
54:
55: @Override
56: protected boolean isRouteDisplayed() {
57: // TODO Auto-generated method stub
58: return false;
59: }
60:
61: private void getGeoPointUser(double lat, double lon) {
62: // TODO Auto-generated method stub
63: GeoPoint point = new GeoPoint((int) (lat * 1E6),
64: (int) (lon * 1E6));
65: OverlayItem overlayitem = new OverlayItem(point, "Hai..",
66: "Saya omayib");
67: itemizedOverlay = new
68: CustomItemizedOverlay(this.getResources()
69: .getDrawable(R.drawable.marker), MapMarker.this);
70: itemizedOverlay.addOverlay(overlayitem);
71: mapOverlays.add(itemizedOverlay);
72: mapController.animateTo(point);
73: mapController.setZoom(6);
74: }
75:
76: public class MyLocationListener
77: implements LocationListener {
78:
79: @Override
80: public void onLocationChanged(Location loc) {
81: // TODO Auto-generated method stub
82: if (loc != null) {
83: mapOverlays.remove(itemizedOverlay);
84: Toast.makeText(getBaseContext(),"Location
85: changed : Lat: "+ loc.getLatitude()+ " Lng: "
86: +loc.getLongitude(),
87: Toast.LENGTH_SHORT).show();
88: double lat = loc.getLatitude();
89: double longi = loc.getLongitude();
90: pos.setLatitude(lat * 1E6);
91: pos.setLongitude(longi * 1E6);
92: getGeoPointUser(lat, longi);
93: }
94: }
95:
96: @Override
97: public void onProviderDisabled(String arg0) {
98: // TODO Auto-generated method stub
99: }
100: @Override
101: public void onProviderEnabled(String arg0) {
102: // TODO Auto-generated method stub
103: }
104:
105: @Override
106: public void onStatusChanged(String arg0, int arg1, Bundle
107: arg2) {
108: // TODO Auto-generated method stub
109:
110: }
111: }
112:
113: }
Seteleah tidak ada error, coba di run. Wow!! Android memang luar biasa!
Sumber: omayib.com