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

Reply via email to