安卓覆盖整个地图

5
你怎样创建一个覆盖整个地图的 ItemizedOverlay?
我在地图上有多个标记,它们都是 ItemizedOverlay 类。
我想要创建另一个 ItemizedOverlay,覆盖整个地图以拦截那些不在我的标记上但在地图上的触摸事件。我已经在其他问题中读到,比如这个one,唯一的方法是通过 ItemizedOverlay -> onTap。问题在于我不知道如何创建一个可覆盖整个地图的 Drawable 标记。
我已经尝试过 LinearLayout drawable,但它似乎只能使用一个 drawable 图像作为标记。
以下是我的代码:
    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);

和可绘制的 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>

提前感谢您。

这是需要翻译的内容。

你为什么想要在没有标记的区域中打断触摸事件? - Flo
当用户点击标记时,我使用后台触摸来关闭弹出视图。 - railwayparade
2个回答

5

好的,我已经理解了。要覆盖整个地图,您可以添加一个简单的Overlay子类,没有可绘制对象,并使用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);

0
你可以在现有的ItemizedOverlays中覆盖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) - 在地图上任何位置检测轻拍


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接