Я читаю некоторые данные GPS (долгота, широта) из класса ServerManager, в котором они хранятся.
Чтение выполняется в фоновом потоке AsyncTask и выполняется шаг за шагом. Каждый раз, когда я получаю новую точку, я ставлю ее на карту и хочу нарисовать линию между ней и последней представленной точкой.
Вот часть моего кода:
GeoPoint p;
protected Void doInBackground(Void... voids) {
try {
while (true) {
longitude = Integer.parseInt(ServerManager.getInstance()
.getLastLongitude());
latitude = Integer.parseInt(ServerManager.getInstance()
.getLastLatitude());
Log.d("Date citite de threadul AsyncTask", " ");
System.out.println(longitude);
System.out.println(latitude);
p = new GeoPoint(longitude, latitude);
publishProgress(p);
Thread.sleep(500);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onProgressUpdate(GeoPoint... progress1) {
theRouteDraw(progress1[0]);
geoPointsArray.add(progress1[0]);
if (geoPointsArray.size() > 2) {
int length = geoPointsArray.size();
mapView.getOverlays().add(
new myOverlay(geoPointsArray.get(length - 1),
progress1[0]));
}
}
}
для отображения точек на карте я использую:
public void theRouteDraw (GeoPoint p1) {
mc.animateTo(p1);
mc.setZoom(17);
mapView.invalidate();
mapView.setSatellite(true);
}
А для получения оверлея я использую:
класс myOverlay расширяет оверлей {
GeoPoint gp1;
GeoPoint gp2;
public myOverlay(GeoPoint gp1, GeoPoint gp2) {
this.gp1 = gp1;
this.gp2 = gp2;
}
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, shadow);
Paint mPaint = new Paint();
mPaint.setStyle(Style.STROKE);
mPaint.setColor(Color.GREEN);
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(4);
Projection projection = mapView.getProjection();
Point from = new Point();
projection.toPixels(gp1, from);
Point to = new Point();
projection.toPixels(gp2, to);
canvas.drawLine(from.x, from.y, to.x, to.y, mPaint);
}
}
Мой вопрос:
Кто-нибудь знает, почему на моей карте не нарисована линия? Спасибо тебе:)