在我的应用程序中,我需要在行走,跑步或驾驶时在地图上绘制线条。为获取位置我使用LocattionListener类的OnLocationChanged方法。在OnLocationChanged方法中,我调用线条绘图类。这个类被称为在日志中打印,但我的地图上没有任何行。请帮我。如果您有这方面的经验或想法,请与我分享。
代码:
public void onCreate(Bundle savedInstanceState)
{
.......
myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,new myLocationListener());
}
......
class myLocationListener implements LocationListener {
public void onLocationChanged(Location loc) {
Log.e("status","begin");
Toast.makeText(getBaseContext(),"onStatusChanged - called",Toast.LENGTH_SHORT).show();
Log.e("MAP","onStatusChanged - called");
LocationManager myManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(myManager != null){
String param = (String)myManager.getProviders(true).get(0);
Location loc1 = myManager.getLastKnownLocation(param);
if(loc1 != null){
latPointDst = loc1.getLatitude();
lngPointDst = loc1.getLongitude();
tolat=latPointDst;
tolng=latPointDst;
GeoPoint tmp2= new GeoPoint((int) ( tolat * 1E6), (int) ( tolng * 1E6));
drawingmethod(tmp2);
}
else
Log.e("Err-2","Error: Location is null");
}
else
Log.e("Err-2","Error: Location Manager is null");
Log.e("status","end");
}
}
}
public void drawingmethod(GeoPoint g2) {
geo.add(g2);
mc = mapView.getController();
mapOverlays = mapView.getOverlays();
projection = mapView.getProjection();
Iterator<GeoPoint> itr = geo.listIterator();
while(itr.hasNext()){
if(itr.hasNext()){
p=itr.next();
}
if(itr.hasNext()){
p1=itr.next();
}
mapOverlays.add(new MyOverlay(p.getLatitudeE6(),p.getLongitudeE6(),p1.getLatitudeE6(),p1.getLongitudeE6()));
}
}
//画线类
public class MyOverlay extends Overlay {
private GeoPoint gp1;
private GeoPoint gp2;
public MyOverlay(int fromlatE6,int fromlonE6,int tolatE6,int tologE6) {
int flat=0,flog=0,tlat=0,tlog=0;
flat=fromlatE6;
flog=fromlonE6;
tlat=tolatE6;
tlog=tologE6;
gp1 = new GeoPoint(flat,flog);
gp2 = new GeoPoint(tlat,tlog);
}
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow,long when) {
Projection projection = mapView.getProjection();
if (shadow == false) {
Paint paint = new Paint();
paint.setAntiAlias(true);
Point point = new Point();
projection.toPixels(gp1, point);
paint.setColor(Color.RED);
Point point2 = new Point();
projection.toPixels(gp2, point2);
paint.setStrokeWidth(3);
Log.e("location change","drawing");
canvas.drawLine((float) point.x, (float) point.y, (float) point2.x,(float) point2.y, paint);
Log.e("map","draw2");
}
return super.draw(canvas, mapView, shadow, when);
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// TODO Auto-generated method stub
super.draw(canvas, mapView, shadow);
Log.e("map","draw1");
}
}