我在我的应用程序中实现了谷歌地图。我编写了自己的覆盖类,扩展了ItemizedOverlay以添加叠加层。使用相同的叠加层,我还添加了一个叠加层来显示我在地图上的当前位置。
此叠加层的onTouchEvent用于确定触摸的位置,并能够将叠加层对象移动到地图上的任何位置。然而,这会引起一些问题。指向我当前位置的指针也变为可移动。我想修复这个当前位置指针。
为此,我正在创建一个新类MyNewLocationOverLay,它扩展了我之前创建的自定义叠加层。我的计划是覆盖onTouchEvent方法,并在触摸其他叠加层时返回super.onTouchEvent,并在触摸mylocation覆盖时返回true。如何找出点击的叠加层。我试过了:
public class myOverlayclass extends OverLayClass {
public myOverlayclass(Drawable marker) {
super(marker);
// TODO Auto-generated constructor stub
}
public boolean onTouchEvent(MotionEvent motionEvent, MapView mapView) {
System.out.println("The overlays are*************"+mapView.getOverlays()); //this lists the overlays
return super.onTouchEvent(motionEvent, mapView);
}
}
我需要对此进行比较,以找出触及的叠加层。如何比较叠加层。
if (mapView.getOverlays().contains(mYLocationOverLay))
似乎不起作用。
答案 0 :(得分:0)
在onTouchEvent方法中,我执行了一个命中测试,以找出触摸了哪个叠加层。并将其与myLocationGeoPoint进行比较。
for(OverlayItem item : overlayItems)
{
Point p = new Point();
mapView.getProjection().toPixels(item.getPoint(), p);
item.setMarker(marker);
boolean isHit = hitTest(item, marker, x - p.x, y - p.y);
if(isHit && !(item.getPoint().equals(mylocationgeoPoint))) //this is where I'm checking if I hit my current locating geopoint
{
//NOW THE OVERLAYS ARE MOVABLE
System.out.println("-------------------------inside isHit -----------------------"+item.getPoint() +"my locating geo point is" +mylocationgeoPoint);
.
.
. }
}
希望它有所帮助!
答案 1 :(得分:0)
大多数触摸位置不是叠加位置的精确副本,因此您不能使用.quals或==。将+ -X添加到您的计算中,例如:
for(Overlay item : mapView.getOverlays())
{
MarkerOverlay ov = (MarkerOverlay) item;
if (Math.abs(ov.getGlobalGeoPoint().getLongitudeE6() - geoPoint.getLongitudeE6()) <50 &&
Math.abs(ov.getGlobalGeoPoint().getLatitudeE6()-geoPoint.getLatitudeE6())<50) {
//do ur work here
return true;
}
else{
}
}