【问题标题】:How to add markers to map by touching in MapQuest?如何通过在 MapQuest 中触摸添加标记到地图?
【发布时间】:2015-06-10 04:20:12
【问题描述】:

现在我可以显示程序中定义的地图和标记,但我需要在触摸位置添加标记。

我想我知道这样做的方法,即:

1 为 MapView 设置类似 onTouchEventListener 的东西;

2 从Listener中获取位置信息;

3 根据位置信息设置标记。

但是我对此太陌生了,不知道如何编写代码来实现它,尤其是第 1 步。我的意思是我不明白如何使用像 Add marker on touched location using google map in Android 这样的解决方案。我的问题更根本。我不知道如何为我的 MapView 设置 eventListener 以及我应该使用哪个 eventListener。 https://developer.mapquest.com/content/mobile/android/documentation/api/com/mapquest/android/maps/Overlay.OverlayTouchEventListener.html 这个 OverlayTouchEventListener 似乎是一个,但找不到有用的指南。

那么有人可以详细告诉我如何做到这一点吗?
eg.如何设置监听器,选择哪个监听器?

【问题讨论】:

  • 您如何使用 MapQuest?这是原生 Android 应用还是网络应用?
  • 它是一个地图API,提供了一个MapView。我把它用作一个 MapView,就像 GoogleMap 的 MapView 一样。

标签: android mapquest


【解决方案1】:

试试这个...

1.创建接口 MyGeoPointListener.java

  public interface MyGeoPointListener {
    public void GetGeoPoint(GeoPoint geopoint);
  }

2。创建 Overlay 类:

import com.mapquest.android.maps.ItemizedOverlay;
import com.mapquest.android.maps.OverlayItem;
class DynamicMarkerOverlay extends ItemizedOverlay<OverlayItem> {

    private boolean isPinch = false;
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    private MyGeoPointListener geoPointListener;

    public DynamicMarkerOverlay(Drawable defaultMarker,
            MyGeoPointListener geoPointListener) {
        super(boundCenterBottom(defaultMarker));
        this.geoPointListener = geoPointListener;
    }

    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        return mOverlays.get(i);
    }

    @Override
    public int size() {
        return mOverlays.size();
    }

    @Override
    public boolean onTap(GeoPoint geoPoint, MapView map) {

        if (isPinch) {
            return false;
        } else {

            if (geoPoint != null) {
                if (null != geoPointListener) {
                    geoPointListener.GetGeoPoint(geoPoint);
                }
                return true;
            } else {
                if (null != geoPointListener) {
                    geoPointListener.GetGeoPoint(null);
                }
                return false;
            }
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event, MapView mapView) {
        int fingers = event.getPointerCount();
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            isPinch = false; // Touch DOWN, don't know if it's a pinch yet
        }
        if (event.getAction() == MotionEvent.ACTION_MOVE && fingers == 2) {
            isPinch = true; // Two fingers, def a pinch
        }
        return super.onTouchEvent(event, mapView);
    }

}

3.在活动中实现 MyGeoPointListener

喜欢,

public class MainActivity extends MapActivity implements MyGeoPointListener {

4.覆盖 MyGeoPointListener:

.....

@Override
public void GetGeoPoint(GeoPoint geopoint) {
    if (null != geopoint) {
        String msg = "Lat: " + geopoint.getLatitudeE6() / 1E6 + " - "
                + "Lon: " + geopoint.getLongitudeE6() / 1E6;
        Toast toast = Toast.makeText(MyLocationMap.this, msg,
                Toast.LENGTH_SHORT);
        toast.show();

        List<Overlay> mapOverlays = myMap.getOverlays();
        OverlayItem overlayitem = new OverlayItem(geopoint, "address_name",
                "address");
        Drawable icon = getResources().getDrawable(
                R.drawable.location_marker);
        DynamicMarkerOverlay customoverlay = new DynamicMarkerOverlay(icon,
                this);
        customoverlay.addOverlay(overlayitem);
        mapOverlays.add(customoverlay);
        myMap.getController().animateTo(geopoint);
    }
 }

 .....

5.在 OnCreate() 中

......
public MapView myMap;

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

    .......
    .......

    myMap = (MapView) findViewById(R.id.map);

    Drawable marker = getResources().getDrawable(R.drawable.ic_launcher);

    marker.setBounds(0, 0, marker.getIntrinsicWidth(),
            marker.getIntrinsicHeight());

    myMap.getOverlays().add(new DynamicMarkerOverlay(marker, this));
   
   ......
}

6.结果:

【讨论】:

  • 谢谢。但是,我的问题是一个更根本的问题,即我不知道如何为我的 MapView 设置 eventListener。我不知道如何将您的代码集成到我的代码中...
猜你喜欢
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多