Wednesday, 13 May 2015

Demo for Android v2 Maps Allowing Free hand drawing for user

First create a project on google apis web console. And get the API KEY for v2 maps. 

Include google-play-services_lib in your project.

 1.MainActivity.java

public class MainActivity extends FragmentActivity implements OnMapLongClickListener,OnMapClickListener,OnMarkerDragListener {

 private static GoogleMap map;
 ArrayList points;
 LatLng mLatlng;
 int i=0;
 float distance;
 @Override
 protected void onCreate(Bundle saveInstance) {
  super.onCreate(saveInstance);

  requestWindowFeature(Window.FEATURE_NO_TITLE);
  setContentView(R.layout.activity_main);
  points = new ArrayList();
  map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
  map.setOnMarkerDragListener(this);
  map.setOnMapLongClickListener(this);
  map.setOnMapClickListener(this);
  mLatlng=new LatLng(30.7500, 76.7800 );
  CameraPosition INIT =
    new CameraPosition.Builder()
  .target(new LatLng(30.7500, 76.7800))
  .zoom(17.5F)
  .bearing(300F) // orientation
  .tilt( 50F) // viewing angle
  .build();
  // use map to move camera into position
  map.moveCamera( CameraUpdateFactory.newCameraPosition(INIT) );
  points.add(new LatLng(30.7500, 76.7800));
  //create initial marker
  map.addMarker( new MarkerOptions()
  .position( new LatLng(30.7500, 76.7800) )
  .title("Location").draggable(true)
  .snippet("First Marker")).showInfoWindow();
 }

 @Override
 public void onMarkerDrag(Marker arg0) {
  LatLng dragPosition = arg0.getPosition();
  double dragLat = dragPosition.latitude;
  double dragLong = dragPosition.longitude;
  Log.i("info", "on drag end :" + dragLat + " dragLong :" + dragLong);
  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(dragPosition);
  // Setting points of polyline
  polylineOptions.addAll(points);
  // Adding the polyline to the map
  map.addPolyline(polylineOptions);
  Location locationA = new Location("point A");     
  locationA.setLatitude(mLatlng.latitude); 
  locationA.setLongitude(mLatlng.longitude);
  Location locationB = new Location("point B");
  locationB.setLatitude(dragLat); 
  locationB.setLongitude(dragLong);
  distance = locationA.distanceTo(locationB) ;
  mLatlng=new LatLng(dragLat, dragLong);
 }

 @Override
 public void onMarkerDragEnd(Marker arg0) {
  LatLng dragPosition = arg0.getPosition();
  double dragLat = dragPosition.latitude;
  double dragLong = dragPosition.longitude;
  Log.i("info", "on drag end :" + dragLat + " dragLong :" + dragLong);
  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(dragPosition); 
  // Setting points of polyline
  polylineOptions.addAll(points);
  // Adding the polyline to the map
  map.addPolyline(polylineOptions);
  Toast.makeText(getApplicationContext(), "Distance ="+distance, Toast.LENGTH_LONG).show();
 }

 @Override
 public void onMarkerDragStart(Marker arg0) {

 }

 @Override
 public void onMapClick(LatLng arg0) {
  map.animateCamera(CameraUpdateFactory.newLatLng(arg0));
 }


 @Override
 public void onMapLongClick(LatLng arg0) {
 }   
}
XML layouts :

1. activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    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>

2. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kamal"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <permission
        android:name="com.kamal.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />
    <uses-permission android:name="com.kamal.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-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <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="com.kamal.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="AIzaSyAchnHfCbb35xPnFfd-dbQ72kQ7glqvVzg" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>

</manifest>


OutPut :













No comments:

Post a Comment