Created
February 15, 2017 05:10
-
-
Save mohdmurtuzakhan/cdde3df910546306a5926c823fc33775 to your computer and use it in GitHub Desktop.
Google Maps in Fragment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:id="@+id/drawer_layout" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
android:fitsSystemWindows="true" | |
tools:openDrawer="start"> | |
<include | |
layout="@layout/app_bar_main" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" /> | |
<android.support.design.widget.NavigationView | |
android:id="@+id/nav_view" | |
android:layout_width="wrap_content" | |
android:layout_height="match_parent" | |
android:layout_gravity="start" | |
android:fitsSystemWindows="true" | |
app:headerLayout="@layout/nav_header_main" | |
app:menu="@menu/activity_main_drawer" /> | |
</android.support.v4.widget.DrawerLayout> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<resources> | |
<!-- | |
TODO: Before you run your application, you need a Google Maps API key. | |
To get one, follow this link, follow the directions and press "Create" at the end: | |
https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=EA:67:EF:58:3D:88:FE:EE:7F:BC:D1:7F:BC:C3:37:73:E2:83:10:55%3Bcom.androidtutorialpoint.googlemapsdrawroute | |
You can also add your credentials to an existing key, using this line: | |
EA:67:EF:58:3D:88:FE:EE:7F:BC:D1:7F:BC:C3:37:73:E2:83:10:55;com.androidtutorialpoint.googlemapsdrawroute | |
Alternatively, follow the directions here: | |
https://developers.google.com/maps/documentation/android/start#get-key | |
Once you have your key (it starts with "AIza"), replace the "google_maps_key" | |
string in this file. | |
--> | |
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">(GOOGLEAPIKEY)</string> | |
</resources> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MainActivity extends AppCompatActivity | |
implements NavigationView.OnNavigationItemSelectedListener { | |
public static final int REQUEST_ID_MULTIPLE_PERMISSIONS = 1; | |
public static final int MULTIPLE_PERMISSIONS = 10; // code you want. | |
String[] permissions= new String[]{ | |
Manifest.permission.WRITE_EXTERNAL_STORAGE, | |
Manifest.permission.CAMERA, | |
Manifest.permission.ACCESS_COARSE_LOCATION, | |
Manifest.permission.ACCESS_FINE_LOCATION}; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
try { | |
setContentView(R.layout.activity_main); | |
if (Build.VERSION.SDK_INT >= 23) { | |
if(checkPermissions()) { | |
} | |
} | |
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); | |
setSupportActionBar(toolbar); | |
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); | |
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); | |
drawer.setDrawerListener(toggle); | |
toggle.syncState(); | |
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); | |
navigationView.setNavigationItemSelectedListener(this); | |
if (findViewById(R.id.fragment_container) != null) { | |
if (savedInstanceState != null) { | |
return; | |
} | |
MapFragment firstFragment = new MapFragment(); | |
firstFragment.setArguments(getIntent().getExtras()); | |
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFragment).addToBackStack("Home").commit(); | |
} | |
} | |
catch (Exception e){ | |
if(e!=null){ | |
} | |
} | |
} | |
private boolean checkPermissions() { | |
int result; | |
List<String> listPermissionsNeeded = new ArrayList<>(); | |
for (String p:permissions) { | |
result = ContextCompat.checkSelfPermission(getApplicationContext(),p); | |
if (result != PackageManager.PERMISSION_GRANTED) { | |
listPermissionsNeeded.add(p); | |
} | |
} | |
if (!listPermissionsNeeded.isEmpty()) { | |
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),MULTIPLE_PERMISSIONS ); | |
return false; | |
} | |
return true; | |
} | |
@Override | |
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { | |
switch (requestCode) { | |
case MULTIPLE_PERMISSIONS:{ | |
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ | |
// permissions granted. | |
} else { | |
// no permissions granted. | |
} | |
return; | |
} | |
} | |
} | |
@Override | |
public void onBackPressed() { | |
try { | |
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); | |
if (drawer.isDrawerOpen(GravityCompat.START)) { | |
drawer.closeDrawer(GravityCompat.START); | |
} else { | |
super.onBackPressed(); | |
} | |
} | |
catch (Exception e){ | |
if(e!=null){ | |
} | |
} | |
} | |
@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; | |
} | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
// Handle action bar item clicks here. The action bar will | |
// automatically handle clicks on the Home/Up button, so long | |
// as you specify a parent activity in AndroidManifest.xml. | |
int id = item.getItemId(); | |
//noinspection SimplifiableIfStatement | |
if (id == R.id.action_settings) { | |
return true; | |
} | |
return super.onOptionsItemSelected(item); | |
} | |
@SuppressWarnings("StatementWithEmptyBody") | |
@Override | |
public boolean onNavigationItemSelected(MenuItem item) { | |
// Handle navigation view item clicks here. | |
try { | |
int id = item.getItemId(); | |
Fragment newfragment = new Fragment(); | |
if (id == R.id.nav_camera) { | |
// Handle the camera action | |
newfragment = new HomeFragment(); | |
} else if (id == R.id.nav_gallery) { | |
newfragment = new MapFragment(); | |
} else if (id == R.id.nav_slideshow) { | |
} else if (id == R.id.nav_manage) { | |
} else if (id == R.id.nav_share) { | |
} else if (id == R.id.nav_send) { | |
} | |
setFragment(newfragment); | |
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); | |
drawer.closeDrawer(GravityCompat.START); | |
} | |
catch (Exception e){ | |
if(e!=null){ | |
} | |
} | |
return true; | |
} | |
public void setFragment(Fragment fragment){ | |
fragment.setArguments(getIntent().getExtras()); | |
// Replace the fragment to the 'fragment_container' FrameLayout | |
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).addToBackStack("Home").commit(); | |
} | |
@Override | |
public void onStart() { | |
super.onStart(); | |
} | |
@Override | |
public void onStop() { | |
super.onStop(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MapFragment extends Fragment implements OnMapReadyCallback, | |
GoogleApiClient.ConnectionCallbacks, | |
GoogleApiClient.OnConnectionFailedListener, | |
LocationListener, DirectionFinderListener { | |
private View view; | |
private Context context; | |
private GoogleMap mMap; | |
ArrayList<LatLng> MarkerPoints; | |
GoogleApiClient mGoogleApiClient; | |
Location mLastLocation; | |
LocationRequest mLocationRequest; | |
private TextView mapheader; | |
private int lat, lng; | |
// flag for GPS status | |
boolean isGPSEnabled = false; | |
// flag for network status | |
boolean isNetworkEnabled = false; | |
boolean canGetLocation = false; | |
Location location; // location | |
LatLng originl, destination; | |
double latitude; // latitude | |
double longitude; // longitude | |
// The minimum distance to change Updates in meters | |
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters | |
// The minimum time between updates in milliseconds | |
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute | |
// Declaring a Location Manager | |
protected LocationManager locationManager; | |
// Directions | |
private List<Marker> originMarkers = new ArrayList<>(); | |
private List<Marker> destinationMarkers = new ArrayList<>(); | |
private List<Polyline> polylinePaths = new ArrayList<>(); | |
private ProgressDialog progressDialog; | |
private LatLng mylatLng; | |
private String directionsurl, directionparameters, apikey, origin,distance,duration; | |
private LocationListener locationListener; | |
private ImageButton btn_gnav; | |
@Nullable | |
@Override | |
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { | |
try { | |
view = inflater.inflate(R.layout.mapfragment, container, false); | |
mapheader = (TextView) view.findViewById(R.id.mapheader); | |
context = getActivity(); | |
mapheader.setText("Proceed to InfoRite Technologies"); | |
apikey = getResources().getString(R.string.google_maps_key); | |
try { | |
// Loading map Obtain the SupportMapFragment and get notified when the map is ready to be used | |
locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE); | |
SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)); | |
mapFragment.getMapAsync(this); | |
//Initializing googleapi client | |
mGoogleApiClient = new GoogleApiClient.Builder(context) | |
.addConnectionCallbacks(this) | |
.addOnConnectionFailedListener(this) | |
.addApi(LocationServices.API) | |
.build(); | |
} catch (Exception e) { | |
if (e != null) { | |
e.printStackTrace(); | |
} | |
} | |
} catch (Exception e) { | |
if (e != null) { | |
} | |
} | |
return view; | |
} | |
public Location getLocation() { | |
try { | |
locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE); | |
// getting GPS status | |
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); | |
// getting network status | |
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); | |
if (!isGPSEnabled && !isNetworkEnabled) { | |
// no network provider is enabled | |
} else { | |
this.canGetLocation = true; | |
if (isNetworkEnabled) { | |
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | |
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { | |
} | |
} else { | |
} | |
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, (android.location.LocationListener) this); | |
if (locationManager != null) { | |
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); | |
if (location != null) { | |
latitude = location.getLatitude(); | |
longitude = location.getLongitude(); | |
} | |
} | |
} | |
// if GPS Enabled get lat/long using GPS Services | |
if (isGPSEnabled) { | |
if (location == null) { | |
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, (android.location.LocationListener) this); | |
if (locationManager != null) { | |
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); | |
if (location != null) { | |
latitude = location.getLatitude(); | |
longitude = location.getLongitude(); | |
} | |
} | |
} | |
} | |
} | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
return location; | |
} | |
@Override | |
public void onStart() { | |
mGoogleApiClient.connect(); | |
super.onStart(); | |
} | |
@Override | |
public void onStop() { | |
mGoogleApiClient.disconnect(); | |
super.onStop(); | |
} | |
@Override | |
public void onMapReady(GoogleMap googleMap) { | |
try { | |
mMap = googleMap; | |
mMap.getUiSettings().setRotateGesturesEnabled(true); | |
mMap.getUiSettings().setAllGesturesEnabled(true); | |
mMap.getUiSettings().setZoomControlsEnabled(true); | |
mMap.getUiSettings().setCompassEnabled(true); | |
mMap.getUiSettings().setMyLocationButtonEnabled(true); | |
GPSTracker objGPSTracker = new GPSTracker(context); | |
location = objGPSTracker.getLocation(); | |
latitude = location.getLatitude(); | |
longitude = location.getLongitude(); | |
mylatLng = new LatLng(latitude, longitude); | |
mMap.addMarker(new MarkerOptions().position(mylatLng).title("Origin").snippet("Starting Position")); | |
mMap.moveCamera(CameraUpdateFactory.newLatLng(mylatLng)); | |
originl = new LatLng(latitude, longitude); | |
destination = new LatLng(17.357325, 78.459755); | |
if (destination != null) { | |
mMap.addMarker(new MarkerOptions().position(destination).title("Destination").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); | |
} | |
//Initialize Google Play Services | |
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | |
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { | |
mMap.setMyLocationEnabled(true); | |
} | |
} else { | |
mMap.setMyLocationEnabled(true); | |
} | |
directionsurl = getUrl(originl, destination); | |
new FetchUrl().execute(); | |
} catch (Exception e) { | |
if (e != null) { | |
} | |
} | |
} | |
protected synchronized void buildGoogleApiClient() { | |
mGoogleApiClient = new GoogleApiClient.Builder(context) | |
.addConnectionCallbacks(this) | |
.addOnConnectionFailedListener(this) | |
.addApi(LocationServices.API) | |
.build(); | |
mGoogleApiClient.connect(); | |
} | |
@Override | |
public void onConnected(Bundle bundle) { | |
try { | |
mLocationRequest = new LocationRequest(); | |
mLocationRequest.setInterval(1000); | |
mLocationRequest.setFastestInterval(1000); | |
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); | |
if (ContextCompat.checkSelfPermission(context, | |
Manifest.permission.ACCESS_FINE_LOCATION) | |
== PackageManager.PERMISSION_GRANTED) { | |
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (com.google.android.gms.location.LocationListener) this); | |
} | |
} catch (Exception e) { | |
if (e != null) { | |
} | |
} | |
} | |
@Override | |
public void onConnectionSuspended(int i) { | |
} | |
@Override | |
public void onLocationChanged(Location location) { | |
try { | |
mLastLocation = location; | |
//stop location updates | |
if (mGoogleApiClient != null) { | |
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, (com.google.android.gms.location.LocationListener) this); | |
} | |
} catch (Exception e) { | |
if (e != null) { | |
} | |
} | |
} | |
@Override | |
public void onStatusChanged(String provider, int status, Bundle extras) { | |
} | |
@Override | |
public void onProviderEnabled(String provider) { | |
} | |
@Override | |
public void onProviderDisabled(String provider) { | |
} | |
@Override | |
public void onConnectionFailed(ConnectionResult connectionResult) { | |
} | |
public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99; | |
@Override | |
public void onRequestPermissionsResult(int requestCode, | |
String permissions[], int[] grantResults) { | |
switch (requestCode) { | |
case MY_PERMISSIONS_REQUEST_LOCATION: { | |
if (grantResults.length > 0 | |
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) { | |
if (ContextCompat.checkSelfPermission(context, | |
Manifest.permission.ACCESS_FINE_LOCATION) | |
== PackageManager.PERMISSION_GRANTED) { | |
if (mGoogleApiClient == null) { | |
buildGoogleApiClient(); | |
} | |
mMap.setMyLocationEnabled(true); | |
} | |
} else { | |
Toast.makeText(context, "permission denied", Toast.LENGTH_LONG).show(); | |
} | |
return; | |
} | |
} | |
} | |
public void setFragment(Fragment fragment, Bundle bundle) { | |
fragment.setArguments(bundle); | |
getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).addToBackStack("Map").commit(); | |
} | |
@Override | |
public void onDirectionFinderStart() { | |
progressDialog = ProgressDialog.show(context, "Please wait.", "Finding direction..!", true); | |
if (originMarkers != null) { | |
for (Marker marker : originMarkers) { | |
marker.remove(); | |
} | |
} | |
if (destinationMarkers != null) { | |
for (Marker marker : destinationMarkers) { | |
marker.remove(); | |
} | |
} | |
if (polylinePaths != null) { | |
for (Polyline polyline : polylinePaths) { | |
polyline.remove(); | |
} | |
} | |
} | |
@Override | |
public void onDirectionFinderSuccess(List<Route> routes) { | |
progressDialog.dismiss(); | |
polylinePaths = new ArrayList<>(); | |
originMarkers = new ArrayList<>(); | |
destinationMarkers = new ArrayList<>(); | |
for (Route route : routes) { | |
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(route.startLocation, 16)); | |
((TextView) view.findViewById(R.id.tvDuration)).setText(route.duration.text); | |
((TextView) view.findViewById(R.id.tvDistance)).setText(route.distance.text); | |
originMarkers.add(mMap.addMarker(new MarkerOptions() | |
.icon(BitmapDescriptorFactory.fromResource(R.drawable.start_blue)) | |
.title(route.startAddress) | |
.position(route.startLocation))); | |
destinationMarkers.add(mMap.addMarker(new MarkerOptions() | |
.icon(BitmapDescriptorFactory.fromResource(R.drawable.end_green)) | |
.title(route.endAddress) | |
.position(route.endLocation))); | |
PolylineOptions polylineOptions = new PolylineOptions(). | |
geodesic(true). | |
color(Color.BLUE). | |
width(10); | |
for (int i = 0; i < route.points.size(); i++) | |
polylineOptions.add(route.points.get(i)); | |
polylinePaths.add(mMap.addPolyline(polylineOptions)); | |
} | |
} | |
private String getUrl(LatLng origin, LatLng dest) { | |
String str_origin = "origin=" + origin.latitude + "," + origin.longitude; | |
String str_dest = "destination=" + dest.latitude + "," + dest.longitude; | |
String sensor = "sensor=false"; | |
String parameters = str_origin + "&" + str_dest + "&" + sensor; | |
String output = "json"; | |
String url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" + parameters + "&key=" + apikey; | |
return url; | |
} | |
/** | |
* A method to download json data from url | |
*/ | |
private String downloadUrl(String strUrl) throws IOException { | |
String data = ""; | |
InputStream iStream = null; | |
HttpURLConnection urlConnection = null; | |
try { | |
URL url = new URL(strUrl); | |
// Creating an http connection to communicate with url | |
urlConnection = (HttpURLConnection) url.openConnection(); | |
// Connecting to url | |
urlConnection.connect(); | |
// Reading data from url | |
iStream = urlConnection.getInputStream(); | |
BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); | |
StringBuffer sb = new StringBuffer(); | |
String line = ""; | |
while ((line = br.readLine()) != null) { | |
sb.append(line); | |
} | |
data = sb.toString(); | |
Log.d("downloadUrl", data.toString()); | |
br.close(); | |
} catch (Exception e) { | |
Log.d("Exception", e.toString()); | |
} finally { | |
iStream.close(); | |
urlConnection.disconnect(); | |
} | |
return data; | |
} | |
// Fetches data from directions url passed | |
private class FetchUrl extends AsyncTask<String, Void, String> { | |
@Override | |
protected String doInBackground(String... url) { | |
String data = ""; | |
try { | |
data = downloadUrl(directionsurl); | |
Log.d("Background Task data", data.toString()); | |
} catch (Exception e) { | |
Log.d("Background Task", e.toString()); | |
} | |
return data; | |
} | |
@Override | |
protected void onPostExecute(String result) { | |
super.onPostExecute(result); | |
try { | |
if (result != null) { | |
ParserTask parserTask = new ParserTask(); | |
// Invokes the thread for parsing the JSON data | |
parserTask.execute(result); | |
} | |
} catch (Exception e) { | |
if (e != null) { | |
} | |
} | |
} | |
} | |
/** | |
* Async class for parsing the Google Directions in JSON format | |
*/ | |
private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String, String>>>> { | |
// Parsing the data in non-ui thread | |
@Override | |
protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) { | |
JSONObject jObject; | |
List<List<HashMap<String, String>>> routes = null; | |
try { | |
jObject = new JSONObject(jsonData[0]); | |
Log.d("ParserTask", jsonData[0].toString()); | |
DataParser parser = new DataParser(); | |
routes = parser.parse(jObject); | |
Log.d("ParserTask", routes.toString()); | |
} catch (Exception e) { | |
Log.d("ParserTask", e.toString()); | |
e.printStackTrace(); | |
if (e != null) { | |
} | |
} | |
return routes; | |
} | |
// Executes in UI thread, after the parsing process | |
@Override | |
protected void onPostExecute(List<List<HashMap<String, String>>> result) { | |
try { | |
if (result != null) { | |
ArrayList<LatLng> points; | |
PolylineOptions lineOptions = null; | |
// Traversing through all the routes | |
for (int i = 0; i < result.size(); i++) { | |
points = new ArrayList<>(); | |
lineOptions = new PolylineOptions(); | |
// Fetching i-th route | |
List<HashMap<String, String>> path = result.get(i); | |
// Fetching all the points in i-th route | |
for (int j = 0; j < path.size(); j++) { | |
HashMap<String, String> point = path.get(j); | |
if(j==0){ // Get distance from the list | |
distance = (String)point.get("distance"); | |
continue; | |
}else if(j==1){ // Get duration from the list | |
duration = (String)point.get("duration"); | |
continue; | |
} | |
double lat = Double.parseDouble(point.get("lat")); | |
double lng = Double.parseDouble(point.get("lng")); | |
LatLng position = new LatLng(lat, lng); | |
points.add(position); | |
} | |
// Adding all the points in the route to LineOptions | |
lineOptions.addAll(points); | |
lineOptions.width(5); | |
lineOptions.color(Color.parseColor("#009688")); | |
Log.d("onPostExecute", "onPostExecute lineoptions decoded"); | |
} | |
// Drawing polyline in the Google Map for the i-th route | |
if (lineOptions != null) { | |
mMap.addPolyline(lineOptions); | |
} else { | |
Log.d("onPostExecute", "without Polylines drawn"); | |
} | |
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | |
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { | |
mMap.setMyLocationEnabled(true); | |
} | |
} else { | |
mMap.setMyLocationEnabled(true); | |
} | |
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 13)); | |
CameraPosition cameraPosition = new CameraPosition.Builder() | |
.target(new LatLng(location.getLatitude(), location.getLongitude())) // Sets the center of the map to location user | |
.zoom(17) // Sets the zoom | |
.bearing(90) // Sets the orientation of the camera to east | |
.tilt(40) // Sets the tilt of the camera to 30 degrees | |
.build(); // Creates a CameraPosition from the builder | |
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)) | |
} | |
} catch (Exception e) { | |
if (e != null) { | |
} | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context="package.MainActivity"> | |
<LinearLayout | |
android:orientation="vertical" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:layout_centerHorizontal="true" | |
android:layout_alignParentTop="true" | |
android:background="@drawable/border_set" | |
android:id="@+id/linearmap"> | |
<TextView | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="Map Fragment" | |
android:layout_centerHorizontal="true" | |
android:id="@+id/mapheader" | |
android:gravity="center_horizontal" | |
android:layout_gravity="center_horizontal" | |
android:textColor="@color/colorBlack" | |
android:layout_marginTop="5dp" | |
android:layout_marginBottom="5dp" | |
android:textAppearance="?android:attr/textAppearanceMedium" /> | |
</LinearLayout> | |
<fragment | |
android:id="@+id/map" | |
android:name="com.google.android.gms.maps.SupportMapFragment" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
android:layout_below="@+id/linearmap"/> | |
</android.support.percent.PercentRelativeLayout> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
qoyil gap yo'