大家好,我正在尝试将位置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();
}
}
答案 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();
}
}