你将如何创建覆盖整个地图的ItemizedOverlay?
我在地图上有多个标记,它们是ItemizedOverlay类。
我想创建另一个ItemizedOverlay,它覆盖整个地图,以拦截不在我的标记上但触摸地图本身的触摸事件。我已阅读其他SO问题,例如one,唯一的方法是通过ItemizedOverlay-> onTap。问题是我不知道如何创建覆盖整个地图的Drawable标记。
我已尝试使用LinearLayout drawables,但它似乎只能使用可绘制图像作为标记。
这是我的代码
private class BackgroundOverlay<Item extends OverlayItem> extends ItemizedOverlay<OverlayItem>{
private ArrayList<OverlayItem> overlays = new ArrayList<OverlayItem>();
/**
* @param defaultMarker
*/
public BackgroundOverlay(Drawable defaultMarker,Context context) {
super(boundCenterBottom(defaultMarker));
}
@Override
protected OverlayItem createItem(int i) {
return overlays.get(i);
}
@Override
public int size() {
return overlays.size();
}
public void addOverlay(OverlayItem overlay) {
overlays.add(overlay);
populate();
}
protected boolean onTap(int index){
Toast.makeText(getApplicationContext(), "Touched background",Toast.LENGTH_SHORT).show();
return true;
}
}
并创建叠加层
Drawable d=this.getResources().getDrawable(R.layout.full_screen);
BackgroundOverlay<OverlayItem> lay = new BackgroundOverlay<OverlayItem>(d,this);
overlayItem = new OverlayItem(this.mapView.getMapCenter(), "", "");
lay.addOverlay(overlayItem);
mapOverlays.add(lay);
和drawable xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/blue">
</LinearLayout>
提前致谢
答案 0 :(得分:4)
好的,我明白了。要覆盖整个地图,您需要添加一个简单的Overlay子类,没有可绘制的duh。并使用onTap事件。
private class BackgroundOverlay extends Overlay{
public boolean onTap (final GeoPoint p, final MapView mapView){
Toast.makeText(getApplicationContext(), "Touched background",Toast.LENGTH_SHORT).show();
hideOtherFires(mapView.getOverlays());
return true;
}
并在其他叠加层之前实例化,因此它位于
之下//add a background overlay to intercept touches on background
BackgroundOverlay lay = new BackgroundOverlay();
mapOverlays.add(lay);
答案 1 :(得分:0)
您可以在现有的ItemizedOverlay中覆盖Overlay的onTap方法:
/* (non-Javadoc)
* @see com.google.android.maps.Overlay#onTap(com.google.android.maps.GeoPoint, com.google.android.maps.MapView)
*/
@Override
public boolean onTap(GeoPoint p, MapView mapView) {
super.onTap(p, mapView);
OverlayItem item = getFocus();
mapView.refreshDrawableState();
return false;
}
确保将其传递给超类,否则你的onTap(int index)将不会收到该事件。
换句话说:
onTap(int index)
- 检测OverlayItems上的水龙头
onTap(GeoPoint p, MapView mapView)
- 检测地图上任意位置的点按