hi, i was wondering if you could talk a bit about how you were able to
get the overlays to update dynamically? i am trying to do something
similar where i remove any existing overlays, and add a new overlay
with a new geopoint every couple of seconds. in a nutshell, i am
basically getting the user's gps location; adding a random geopoint in
a different overlay and calculating the directions from the random
geopoint to the user's gps point. from there, i am trying to get the
random geopoint to "move" (basically remove an overlay and add a new
one with the next point in the mPoints of the directions). everything
is working up until adding the "moving" points. is this even
possible?
here is where i set the overlays up:
//mapView.invalidate();
// 1. get enemy's last known location
if(started == false){
mapView.getOverlays();
mapOverlays.clear();
enemyOverlay = new GameOverlay(drawableEnemy, null);
enemypoint = new GeoPoint(37779350, -122419250); //
need to set
this to random initially
OverlayItem enemyoverlayitem = new
OverlayItem(enemypoint, "",
"");
enemyOverlay.addOverlay(enemyoverlayitem);
mapOverlays.add(enemyOverlay);
}
// 2. get user's current location
double fromLat = 37.779350, fromLon = -122.419250, toLat =
latPoint, toLon = lngPoint;
//point = new GeoPoint(37779350, -122419250); // need to set
this to gps
point = new GeoPoint((int) (latPoint * 1E6), (int)(lngPoint *
1E6));
userOverlay = new GameOverlay(drawable, null);
OverlayItem useroverlayitem = new OverlayItem(point, "", "");
userOverlay.addOverlay(useroverlayitem);
mapOverlays.add(userOverlay);
MapController mc = mapView.getController();
mc.animateTo(point);
mc.setZoom(1);
//mapView.setSatellite(true);
//mapView.invalidate();
// 3. get directions from enemy to user
String url = RoadProvider.getUrl(fromLat, fromLon, toLat,
toLon);
InputStream is = getConnection(url);
mRoad = RoadProvider.getRoute(is);
// 4. move enemy
mapView.getOverlays();
mapOverlays.clear();
if(started == false){
newEnemyPoint = moveEnemy(point, enemypoint, mRoad);
}
enemyOverlay = new GameOverlay(drawableEnemy, null);
OverlayItem enemyoverlayitem = new OverlayItem(newEnemyPoint,
"", "");
enemyOverlay.addOverlay(enemyoverlayitem);
mapOverlays.add(enemyOverlay);
enemyOverlays = mapView.getOverlays();
enemyOverlays.clear();
GeoPoint currentPoint = null;
for (int i = 0; i < road.mRoute.length; i++) {
currentPoint = new GeoPoint((int) (road.mRoute[i][1] *
1000000), (int) (road.mRoute[i][0] * 1000000));
moveEnemy(currentPoint, i);
}
and here is my move function:
public GeoPoint moveEnemy(GeoPoint userPoint, GeoPoint enemyPoint,
Road mRoad) {
float userLatitude = userPoint.getLatitudeE6();
float userLongitude = userPoint.getLongitudeE6();
float enemyLatitude = enemyPoint.getLatitudeE6();
float enemyLongitude = enemyPoint.getLongitudeE6();
enemyOverlays = mapView.getOverlays();
for (i = i+1; i < mRoad.mRoute.length; i++) {
if(userLatitude != enemyLatitude && userLongitude !=
enemyLongitude){
return newEnemyPoint = new GeoPoint((int)
(mRoad.mRoute[i][1] * 1000000), (int) (mRoad.mRoute[i][0] * 1000000));
} else {
System.out.println("hi: you lost");
}
}
started=true;
return newEnemyPoint;
}
On Jul 18, 2:42 pm, AUandroid <[email protected]> wrote:
> thanks, yeah I was doing a expensive operation in UI. I created a
> AsyncTask and its working fine. Here is an example if anyone
> wantshttp://www.screaming-penguin.com/node/7746
>
> -vk
>
> On Jul 17, 7:15 pm, Frank Weiss <[email protected]> wrote:
>
> > If the updates don't happen until the onCreate or onClickEventHandler
> > methods return, first guess is you're misusing the UI thread. That is,
> > the UI thread is busy in your while loop and can't get anything else
> > done, like drawing theoverlays. Welcome to UI programming!
>
> > I strongly suggest you put you loop into an AsyncTask. and use its
> > callback methods to update the UI. Read the docs carefully.
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en