【发布时间】:2016-07-02 20:59:18
【问题描述】:
我正在尝试为 googlemap 绘制折线,它在 android 版本 4.4(kitkat) 中运行良好,但在 android 5.0(lollipop) 中无法运行。在棒棒糖工作也应该怎么做。你能帮我解决这个问题吗这是我的谷歌地图代码
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);
}
}
}
【问题讨论】:
-
请描述您的问题
-
@Xingchen 我正在显示带有标记和折线的谷歌地图,它在 android 4.4 之前工作正常,但 android 5.0 折线没有出现。折线意味着例如我想从当前位置(gps)画线到目标位置,因为我正在使用折线这工作到 4.4 但不能在 5.0 中工作这是我的问题
-
你的意思是折线没有显示没有任何错误?
-
@Xingchen 我没有收到任何错误。我的问题是折线仅在 android 版本 5.0(lollipop) 上不显示,但它显示的是 android 版本 4.4(kitkat) 你能告诉我如何解决这个问题
-
addPolyLine来自Google Maps Android API v2,那么与 Android API 21 有什么关系?
标签: android google-maps android-5.0-lollipop polyline