当前位置: 代码迷 >> Android >> 如何用谷歌mapAPI实现触碰一点,就在那个点绘制出一个图片(圆圈)
  详细解决方案

如何用谷歌mapAPI实现触碰一点,就在那个点绘制出一个图片(圆圈)

热度:86   发布时间:2016-05-01 13:08:15.0
怎么用谷歌地图API实现触碰一点,就在那个点绘制出一个图片(圆圈)?
比如打开地图后,用户点击一点,然后就在那个点显示出一个图片或者绘制一个圆圈之类的,我用OnTap捕捉了坐标,但是绘制不了。
我顺便问一下:android的canvas一定要在OnDraw(Canvas canvas)这种类似的情况下使用吗,我能使用一个OnTouch(xxx),然后在这个函数里面用canvas吗?

------解决方案--------------------
探讨
我顺便问一下:android的canvas一定要在OnDraw(Canvas canvas)这种类似的情况下使用吗,我能使用一个OnTouch(xxx),然后在这个函数里面用canvas吗?

------解决方案--------------------
onTouch里可以通过调用invalidate()函数触发onDraw(), 实现绘制(绘制的参数可以在onTouch()里进行设置)
------解决方案--------------------
用canvas画上去,把坐标选logCat一下看对不对
------解决方案--------------------
那个不是用j2me的canvas搞的 overlayitem

public class GPS1Activity extends MapActivity {
LocationManager lm;
MapView mv;
Location l;
int lat,lon;
Geocoder coder;
GeoPoint point;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mv = (MapView) findViewById(R.id.mapview);
mv.setBuiltInZoomControls(true);

try {
point = getLocation("深圳地王大厦");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

List<Overlay> mapViewList = mv.getOverlays();
Drawable d = getResources().getDrawable(R.drawable.a);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());

MyOverlayItem myItem = new MyOverlayItem(d);
OverlayItem item = new OverlayItem(point, "", "");
item.setMarker(d);
myItem.additem(item);
mapViewList.add(myItem);

mv.getController().setZoom(16);
mv.getController().animateTo(point);
}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

private GeoPoint getLocation(String str) throws IOException
{
int lat,lon;
coder = new Geocoder(this, Locale.getDefault());
List<Address> list = coder.getFromLocationName(str, 1);
if((list!=null)&&(list.size()>0))
{
Address a = list.get(0);
lat = (int)(a.getLatitude()*1e6);
lon = (int)(a.getLongitude()*1e6);
}
else
{
lat = (int)(22.55*1e6);
lon = (int)(114.1*1e6);
}

return new GeoPoint(lat, lon);
}

class MyOverlayItem extends ItemizedOverlay<OverlayItem>
{
private List<OverlayItem> list = new ArrayList<OverlayItem>();
public MyOverlayItem(Drawable defaultMarker) {
super(defaultMarker);
// TODO Auto-generated constructor stub
}

public void additem(OverlayItem item)
{
list.add(item);
populate();
}

@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return list.get(i);
}

@Override
public int size() {
// TODO Auto-generated method stub
return list.size();
}

}
}