如果在LocationChanged上进行了更改,则将位置存储在数组列表中

时间:2018-12-06 14:52:14

标签: android arrays list maps

大家好,我正在尝试将位置lat和long存储在数组列表中,并根据该位置绘制一条折线,这样的想法是,如果用户移动,它将从过去的latlng绘制到当前的latlng的Polyline等等。

这是我上面停留在我上面的代码,现在可以将位置存储在数组列表中,因为如果我在调用数组list.get(I + 1)时将位置存储在第一个值中,则会出现IndexOutOFBounds错误。

任何想法,如何在每次更改位置时都将location.latlng保存在数组列表中,然后将数组列表值显示在Polyline添加中。

以下是我的代码:

谢谢!

        @Override
        public void onLocationChanged(Location location){

            double latitude = location.getLatitude();
            double longitude = location.getLongitude();




            //is called only once
            lat.add(latitude);
            lng.add(longitude);


            //second coordinates
            lat.add(latitude);
            lng.add(longitude);


            Geocoder geocoder = new Geocoder(getApplicationContext());

            try {
                List<Address> addresses =
                        geocoder.getFromLocation(latitude, longitude, 1);
                String result = addresses.get(0).getLocality()+":";
                result += addresses.get(0).getCountryName();
                LatLng latLng = new LatLng(latitude, longitude);
                if (marker != null){
                    marker.remove();
                    marker = mMap.addMarker(new MarkerOptions().position(latLng).title(result));
                    int i = 0;
                    Polyline polyline = mMap.addPolyline(new PolylineOptions()
                                .clickable(true)
                                .add
                                        (       new LatLng(lat.get(i), lng.get(i)),
                                                new LatLng(lat.get(i + 1), lng.get(i + 1))
                                        ));

                        polyline.setEndCap(new RoundCap());
                        polyline.setWidth(POLYLINE_STROKE_WIDTH_PX);
                        polyline.setColor(COLOR_BLACK_ARGB);
                        polyline.setJointType(JointType.ROUND);
                        polyline.setColor(COLOR_BLACK_ARGB);

                        }
                    else
                    {
                        marker = mMap.addMarker(new MarkerOptions().position(latLng).title(result));
                    int i = 0;
                    Polyline polyline = mMap.addPolyline(new PolylineOptions()
                            .clickable(true)
                            .add
                                    (       new LatLng(lat.get(i),lng.get(i)),
                                            new LatLng(lat.get(i+1),lng.get(i+1))
                                    ));

                    polyline.setEndCap(new RoundCap());
                    polyline.setWidth(POLYLINE_STROKE_WIDTH_PX);
                    polyline.setColor(COLOR_BLACK_ARGB);
                    polyline.setJointType(JointType.ROUND);
                    polyline.setColor(COLOR_BLACK_ARGB);

                    }


            } catch (IOException e)
            {

                e.printStackTrace();

            }
        }

1 个答案:

答案 0 :(得分:0)

下面的代码解决了我的问题:因此,您可以使用以下代码跟踪用户的位置更改:

    locationListener = new LocationListener() {


        ArrayList<Double> lastLat= new ArrayList<>();
        ArrayList<Double>lastLong= new ArrayList<>();
        int i = 0;


        @Override
        public void onLocationChanged(Location location){

            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            lastLat.add(latitude);
            lastLong.add(longitude);


            Geocoder geocoder = new Geocoder(getApplicationContext());

            try {
                List<Address> addresses =
                        geocoder.getFromLocation(latitude, longitude, 1);
                String result = addresses.get(0).getLocality()+":";
                result += addresses.get(0).getCountryName();
                LatLng latLng = new LatLng(latitude, longitude);
                if (marker != null){
                    marker.remove();
                    marker = mMap.addMarker(new MarkerOptions().position(latLng).title(result));

                    Polyline polyline = mMap.addPolyline(new PolylineOptions()
                                .clickable(true)
                                .add
                                        (

                                                new LatLng(latitude, longitude),
                                                new LatLng(lastLat.get(i), lastLong.get(i))

                                        ));


                        polyline.setEndCap(new RoundCap());
                        polyline.setWidth(POLYLINE_STROKE_WIDTH_PX);
                        polyline.setColor(COLOR_BLACK_ARGB);
                        polyline.setJointType(JointType.ROUND);
                        polyline.setColor(COLOR_BLACK_ARGB);
                        i++;
                    }
                    else
                    {
                        marker = mMap.addMarker(new MarkerOptions().position(latLng).title(result));
                    int i = 0;
                    Polyline polyline = mMap.addPolyline(new PolylineOptions()
                            .clickable(true)
                            .add
                                    (

                                            new LatLng(latitutde,longitude),
                                            new LatLng(lastLat.get(i),lastLong.get(i))



                                    ));
                    polyline.setEndCap(new RoundCap());
                    polyline.setWidth(POLYLINE_STROKE_WIDTH_PX);
                    polyline.setColor(COLOR_BLACK_ARGB);
                    polyline.setJointType(JointType.ROUND);
                    polyline.setColor(COLOR_BLACK_ARGB);

                        i++; }

                        } catch (IOException e)
            {

                e.printStackTrace();

            }
        }