Android 覆盖整个 map

标签 android android-mapview itemizedoverlay

您将如何创建覆盖整个 map 的 ItemizedOverlay?

我在 map 上有多个标记,它们是 ItemizedOverlay 类。

我想创建另一个覆盖整个 map 的 ItemizedOverlay 以拦截不在我的标记上但在 map 本身上的触摸事件。我读过其他类似这样的 SO 问题 one做到这一点的唯一方法是通过 ItemizedOverlay->onTap。问题是我不知道如何创建覆盖整个 map 的 Drawable 标记。

我试验过 LinearLayout 可绘制对象,但它似乎只能使用可绘制图像作为标记。

这是我的代码

    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>

提前致谢

最佳答案

好的,我想通了。要覆盖整个 map ,您可以添加一个没有可绘制对象的简单 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);

关于Android 覆盖整个 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5908207/

相关文章:

android - 当前位置未在 android 中拾取

android - 将 ItemizedOverlay 添加到我的 map View

android - 如何在 MapView overlay 中从 URL 实现标记延迟加载

android - 如何在 Android.mk 构建过程结束时运行 shell 命令?

android - 如何判断 Android 是否启用了位置检测

java - 如何在onProgressChanged之外获取seekBar的实时值?

Android 1.6 Mapview 在用户与 map 交互之前不会显示路况

Android 旋转 MapView

android - TelephonyManager 实例化

java - Android,自己画的, "divided"布局不行