谷歌地图折线不适用于Android 5.0版(棒棒糖)
作者:互联网
我正在尝试为googlemap绘制折线,它工作正常到Android版本4.4(kitkat),但它不能在android 5.0(棒棒糖).怎么做在棒棒糖工作也.你能不能帮我解决这个问题这是我的谷歌地图代码
public class MapLocation extends FragmentActivity implements OnMarkerClickListener {
GoogleMap map;
ArrayList<LatLng> markerPoints;
LatLng origin,dest1,dest2,dest3;
Marker marker1,marker2,marker3;
PolylineOptions lineOptions = new PolylineOptions();
Polyline line ;
int pos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.gmap_direction);
markerPoints = new ArrayList<LatLng>();
// Getting reference to SupportMapFragment of the activity_main
SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
// Getting Map for the SupportMapFragment
map = fm.getMap();
if(map!=null){
// Enable MyLocation Button in the Map
map.setMyLocationEnabled(true);
// Getting LocationManager object from System Service LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
// Getting the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
// Getting Current Location
Location location = locationManager.getLastKnownLocation(provider);
pos = getIntent().getIntExtra("pos",0);
try{
switch (pos) {
case 1:
dest2 = new LatLng(18.545981, 73.902132);
marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("PUNE,KALYANINAGAR").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
break;
case 2:
dest2 = new LatLng(17.429122, 78.412745);
marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Jubilee Hills").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
break;
case 3:
dest2 = new LatLng(19.115177, 72.909486);
marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("MUMBAI, POWAI").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
break;
case 4:
dest2 = new LatLng(18.545981, 73.902132);
marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("PUNE,MAGARPATTA").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
break;
case 5:
dest2 = new LatLng(12.924438, 77.631537);
marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Koramangala").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
break;
case 6:
dest2 = new LatLng(12.9044019,77.6690773);
marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Sarjapur").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
break;
case 7:
dest2 = new LatLng(12.972442, 77.639195);
marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Indiranagar").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
break;
case 8:
dest2 = new LatLng(12.968719, 77.747883);
marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Whitefield").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
break;
// dest1 = new LatLng(19.115177, 72.909486);
}
// Showing the current location in Google Map
map.moveCamera(CameraUpdateFactory.newLatLng(dest2));
// Zoom in the Google Map
map.animateCamera(CameraUpdateFactory.zoomTo(15));
marker2.showInfoWindow();
if(location!=null){
onLocationChanged(location);
String url = getDirectionsUrl(origin, dest2);
DownloadTask downloadTask = new DownloadTask();
// Start downloading json data from Google Directions API
downloadTask.execute(url);
}
}
catch(Exception e){
}
}
}
/** A class to parse the Google Places 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]);
DirectionsJSONParser parser = new DirectionsJSONParser();
// Starts parsing data
routes = parser.parse(jObject);
}catch(Exception e){
e.printStackTrace();
}
return routes;
}
// Executes in UI thread, after the parsing process
@Override
protected void onPostExecute(List<List<HashMap<String, String>>> result) {
ArrayList<LatLng> points = null;
//PolylineOptions lineOptions = null;
MarkerOptions markerOptions = new MarkerOptions();
// Traversing through all the routes
for(int i=0;i<result.size();i++){
points = new ArrayList<LatLng>();
//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);
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(4);
lineOptions.color(Color.BLUE);
}
// Drawing polyline in the Google Map for the i-th route
//map.addPolyline(lineOptions);
line = map.addPolyline(lineOptions);
}
}
}
解决方法:
尝试修改onPostExecute的代码:
@Override
protected void onPostExecute(List<List<HashMap<String, String>>> result) {
ArrayList<LatLng> points = null;
//PolylineOptions lineOptions = null;
//MarkerOptions markerOptions = new MarkerOptions();
points = new ArrayList<LatLng>();
// Traversing through all the routes
for(int i=0;i<result.size();i++){
//points = new ArrayList<LatLng>();
//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);
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(4);
//lineOptions.color(Color.BLUE);
}
// Drawing polyline in the Google Map for the i-th route
//map.addPolyline(lineOptions);
lineOptions.addAll(points);
lineOptions.width(4);
lineOptions.color(Color.BLUE);
line = map.addPolyline(lineOptions);
}
我在for循环之前移动了列表点实例,在for循环之后移动了lineOptions.
希望这有帮助.
标签:polyline,android,google-maps,android-5-0-lollipop 来源: https://codeday.me/bug/20191003/1846810.html