In this article, we will create an Android application which draws polyline and markers along the tapped positions in Google Map Android API V2. Long click the Google Map to clear all the existing polylines and markers in the Google Map.
This application is developed in Eclipse 4.2.1 with ADT plugin ( 21.1.0 ) and Android SDK ( 21.1.0 ) and is tested in a real Android Phone with Android ( 2.3.6 ).
Download and configure Google Play Services Library in Eclipse
Google Map for Android is now integrated with Google Play Services. So we need to set up Google Play Service Library for developing Google Map application in Android.
Please follow the given below link to setup Google Play Service library in Eclipse.
Note : Please ensure that, the latest version of Google Play Service Library is installed
Get the API key for Google Maps Android API v2
We need to get an API key from Google to use Google Maps in Android application. Please follow the given below link to get the API key for Google Maps Android API v2.
Add Android Support library to this project
By default, Android support library (android-support-v4.jar ) is added to this project by Eclipse IDE to the directory libs. If it is not added, we can do it manually by doing the following steps :
- Open Project Explorer by Clicking “Window -> Show View -> Project Explorer”
- Right click this project
- Then from popup window, Click “Android Tools -> Add Support Library “
Update the layout file res/layout/activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
| android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity" > < fragment android:id = "@+id/map" android:layout_width = "match_parent" android:layout_height = "match_parent" class = "com.google.android.gms.maps.SupportMapFragment" /> </ RelativeLayout > |
Update the file src/in//locationmarkerlatlng/MainActivity.java
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
| import java.util.ArrayList; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.Menu; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnMapClickListener; import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.gms.maps.model.PolylineOptions; public class MainActivity extends FragmentActivity { GoogleMap googleMap; ArrayList<LatLng> points; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); points = new ArrayList<LatLng>(); // Getting reference to the SupportMapFragment of activity_main.xml SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); // Getting GoogleMap object from the fragment googleMap = fm.getMap(); // Enabling MyLocation Layer of Google Map googleMap.setMyLocationEnabled( true ); // Setting OnClick event listener for the Google Map googleMap.setOnMapClickListener( new OnMapClickListener() { @Override public void onMapClick(LatLng point) { // Instantiating the class MarkerOptions to plot marker on the map MarkerOptions markerOptions = new MarkerOptions(); // Setting latitude and longitude of the marker position markerOptions.position(point); // Setting titile of the infowindow of the marker markerOptions.title( "Position" ); // Setting the content of the infowindow of the marker markerOptions.snippet( "Latitude:" +point.latitude+ "," + "Longitude:" +point.longitude); // Instantiating the class PolylineOptions to plot polyline in the map PolylineOptions polylineOptions = new PolylineOptions(); // Setting the color of the polyline polylineOptions.color(Color.RED); // Setting the width of the polyline polylineOptions.width( 3 ); // Adding the taped point to the ArrayList points.add(point); // Setting points of polyline polylineOptions.addAll(points); // Adding the polyline to the map googleMap.addPolyline(polylineOptions); // Adding the marker to the map googleMap.addMarker(markerOptions); } }); googleMap.setOnMapLongClickListener( new OnMapLongClickListener() { @Override public void onMapLongClick(LatLng point) { // Clearing the markers and polylines in the google map googleMap.clear(); // Empty the array list points.clear(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true ; } } |
Update the file AndroidManifest.xml
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| <? xml version = "1.0" encoding = "utf-8" ?> package = "in..locationpolyline" android:versionCode = "1" android:versionName = "1.0" > < uses-sdk android:minSdkVersion = "8" android:targetSdkVersion = "17" /> < permission android:name = "in..locationpolyline.permission.MAPS_RECEIVE" android:protectionLevel = "signature" /> < uses-permission android:name = "in..locationpolyline.permission.MAPS_RECEIVE" /> < uses-permission android:name = "android.permission.INTERNET" /> < uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" /> < uses-permission android:name = "com.google.android.providers.gsf.permission.READ_GSERVICES" /> < uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" /> < uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" /> < uses-feature android:glEsVersion = "0x00020000" android:required = "true" /> < application android:allowBackup = "true" android:icon = "@drawable/ic_launcher" android:label = "@string/app_name" android:theme = "@style/AppTheme" > < activity android:name = "in..locationpolyline.MainActivity" android:label = "@string/app_name" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > < meta-data android:name = "com.google.android.maps.v2.API_KEY" android:value = "YOUR_API_KEY" /> </ application > </ manifest > |
Note : Replace “YOUR_API_KEY” at line 44 with the api key obtained in step 8.
Screenshot of the application
Download Source Code
No comments:
Post a Comment