我一直在试着让这个看似简单的任务工作。 我需要在mapview上的叠加层中放置一个动画gif。
我有以下代码:
AnimationDrawable anim = (AnimationDrawable)getResources().getDrawable(R.drawable.explosion);
但是,我现在如何在叠加层中弹出它并将其扔到mapview上?
目前,为了放置静态图像,我有这个:
class DrawableIcon extends ItemizedOverlay {
private ArrayList mOverlays = new ArrayList();
public DrawableIcon(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
}
然后我使用它:( gp是我想要放置图像的地点的地点)
DrawableIcon image = new DrawableIcon(this.getResources().getDrawable(ResourceID));
image.addOverlay(new OverlayItem(gp, "", ""));
mapOverlays.add(image);
那么我将如何修改此代码,以便当ResourceID是动画gif图像的ID时,gif图像会在mapview上播放动画?
提前致谢!
答案 0 :(得分:6)
要在地图上显示动画,可以使用MapView类的addView方法。但是必须使用MapView.LayoutParams初始化视图的布局参数。
在这种情况下,当您滚动地图时,视图将自动移动!
这很简单:
将视图添加到MapView。
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);
}