Moving icons on a Android MapView

淺唱寂寞╮ 提交于 2019-11-30 03:55:46

There are two things that I have in mind about your problem.

First, did you consider using invalidate() on the MapView to force a redraw? That's probably not the most efficient solution, but it should at least get you something you can work from.

Second, you can refresh the items on your map by calling the activity again. Here is an example.

Using built-in capabilities of MapView and Overlays to draw animation will likely kill your perfromance. My suggestion is:

1) Combine MapView with another View. MapView will give you necessary screen coordinates and another view will serve as a canvas for animation. Both views should occupy the same screen positions (use frame layout);

2) Once you get positions of the map marker you want to animate - remove it from map and start doing animation of marker's movements using second view. Here you can leverage specialized android animation classes (i.e. Animation, AnimationUtil, AnimationSet)

3) Once you've done with animation - add marker to mapview overlay, now in its new position and invalidate overlay

Maybe there can be more optimal approach (i.e. use animation directly on MapView canvas), but the bottom line - you should use specialized animation mechanism to prevent perfromance issues.

I'm still pretty new to all this Android Stuff, but I was reading Android Unleashed 2nd ed (manning early access program version) the other day, where it covers Animations... which sounds like just the thing.

Animation anim = new TranslateAnimation( startX, stopX, startY, stopY );
anim.setDuration( 2000 /* 2 seconds */ );
anim.init( overlayWid, overlayHei, parentWid, parentHei )

myItemizedOverlay.startAnimation( anim );

Note that I haven't actually tried anything of the sort, but that's what the book/JavaDoc leads me to believe will work. You will probably need to call prior to startAnimation(). Like I said... hardly my area of expertise (yet!).

I don't think you'll need to mess with invalidate at all with this approach.

As option to display animation you can use addView method of MapView class. It is as simple as:

  1. just create a view (like ImageView or any other View);
  2. initialize the view layout, create and pass MapView.LayoutParams to setLayoutParams method;
  3. add the view to MapView.

View will automatically move when you scroll the map.

public static void addAnimationToMap(MapView map, int animationResourceId, GeoPoint geoPoint) {

    final ImageView view = new ImageView(map.getContext());
    view.setImageResource(animationResourceId);

    //Post to start animation because it doesn't start if start() method is called in activity OnCreate method.
    view.post(new Runnable() {
        @Override
        public void run() {
            AnimationDrawable animationDrawable = (AnimationDrawable) view.getDrawable();
            animationDrawable.start();
        }
    });

    map.addView(view);

    MapView.LayoutParams layoutParams = new MapView.LayoutParams(
            MapView.LayoutParams.WRAP_CONTENT,
            MapView.LayoutParams.WRAP_CONTENT,
            geoPoint,
            MapView.LayoutParams.BOTTOM_CENTER);
    view.setLayoutParams(layoutParams);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!