Создание двух полилиний разного цвета в Google Maps API Android Studio - PullRequest
0 голосов
/ 09 февраля 2019

У меня проблема с изменением цвета полилинии, можете ли вы помочь мне решить эту проблему ... а также, план состоит в том, чтобы построить две полилинии каждый раз, например (с 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;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...