У меня проблема с изменением цвета полилинии, можете ли вы помочь мне решить эту проблему ... а также, план состоит в том, чтобы построить две полилинии каждый раз, например (с 7:00 утра -8:00 утра), он построит две линии (север и юг), РАЗНЫЕ ЦВЕТА.Мне трудно искать кого-то, чтобы решить мою проблему, до сих пор я все еще ищу ответ.Помогите мне, пожалуйста.
package com.example.admin.samplesamplesampleagain3;
import android.graphics.Color;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
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.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import org.json.JSONException;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, AdapterView.OnItemSelectedListener {
private GoogleMap mMap;
private Spinner spinnerTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
// Spinner element
Spinner spinner = (Spinner) findViewById(R.id.spinnerTime);
// Spinner click listener
spinner.setOnItemSelectedListener(this);
// Spinner Drop down elements
List<String> time = new ArrayList<String>();
time.add("7:00 AM - 8:00 AM");
time.add("9:00 AM - 10:00 AM");
time.add("11:00 AM - 12:00 PM");
time.add("01:00 PM - 02:00 PM");
// Creating adapter for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, time);
// Drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
spinner.setAdapter(dataAdapter);
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
// On selecting a spinner item
mMap.clear();
String item = adapterView.getItemAtPosition(i).toString();
Toast.makeText(adapterView.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
switch (item){
case "7:00 AM - 8:00 AM":
getDirection(14.693522, 121.022022,14.695753, 120.999685);
break;
case "9:00 AM - 10:00 AM":
getDirection(14.582342,121.054329,14.628598,121.047089);
break;
case "11:00 AM - 12:00 PM":
getDirection(14.593434, 121.058304,14.539938, 121.016748);
break;
case "01:00 PM - 02:00 PM":
getDirection(14.593434, 121.058304,14.690497, 121.027751);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
public String makeURL (double sourcelat, double sourcelog, double destlat, double destlog ){
StringBuilder urlString = new StringBuilder();
urlString.append("https://maps.googleapis.com/maps/api/directions/json");
urlString.append("?origin=");// from
urlString.append(Double.toString(sourcelat));
urlString.append(",");
urlString
.append(Double.toString( sourcelog));
urlString.append("&destination=");// to
urlString
.append(Double.toString( destlat));
urlString.append(",");
urlString.append(Double.toString(destlog));
urlString.append("&sensor=false&mode=driving&alternatives=true");
urlString.append("&key=");
urlString.append(getResources().getString(R.string.google_direction_api));
return urlString.toString();
}
private void getDirection(final double fromLatitude, final double fromLongitude, final double toLatitude, final double toLongitude ){
//Move and Pin to map
LatLng from = new LatLng(fromLatitude, fromLatitude);
mMap.addMarker(new MarkerOptions().position(from).title("Marker in From"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(from));
LatLng to = new LatLng(toLatitude, toLongitude);
mMap.addMarker(new MarkerOptions().position(to).title("Marker in To"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(to));
//Zoom Camera
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(toLatitude,toLongitude),13.0f));
//Getting the URL
final String url = makeURL(fromLatitude, fromLongitude, toLatitude, toLongitude);
//Showing a dialog till we get the route
//Creating a string request
StringRequest stringRequest = new StringRequest(url,
new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("URL",url);
drawPath(response,fromLatitude,fromLongitude,toLatitude,toLongitude);
}
},
new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
//Adding the request to request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
public void drawPath(String result,double fromLatitude,double fromLongitude,double toLatitude,double toLongitude) {
try {
//Parsing json
final JSONObject json = new JSONObject(result);
JSONArray routeArray = json.getJSONArray("routes");
JSONObject routes = routeArray.getJSONObject(0);
JSONObject overviewPolylines = routes.getJSONObject("overview_polyline");
String encodedString = overviewPolylines.getString("points");
List<LatLng> list = decodePoly(encodedString);
Polyline line = mMap.addPolyline(new PolylineOptions()
.addAll(list)
.width(13)
.color(Color.BLUE)
.geodesic(true)
);
}
catch (JSONException e) {
}
}
private List<LatLng> decodePoly(String encoded) {
List<LatLng> poly = new ArrayList<LatLng>();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng p = new LatLng( (((double) lat / 1E5)),
(((double) lng / 1E5) ));
poly.add(p);
}
return poly;
}
}