【问题标题】:marker not display on map in htc标记未显示在 htc 的地图上
【发布时间】:2011-12-30 08:22:59
【问题描述】:

我被这个困住了,我尝试了所有的可能性,但没有成功。我已经创建了带有地图的简单应用程序进行测试,用户可以简单地触摸地图并在那个地方放置标记。这将在除 htc 设备之外的所有设备中成功运行。我不知道怎么实现mapview的onTouch事件

这是我的 onTouch 代码

private class MarkerOverlay extends Overlay{        
    private boolean isMove;
    @Override
    public boolean onTouchEvent(MotionEvent e, MapView mapView) {           
        final int x = (int) e.getX();
        final int y = (int) e.getY();
        if(e.getAction()==1){
            if(!isMove){
                geopoint = mapView.getProjection().fromPixels(x, y);
                OverlayItem overlayItem = new OverlayItem(geopoint, "Title", "Description");
                if(mapOverlay.m_overlays.size()>=1){
                    mapOverlay.clearOverlayAll();
                }
                mapOverlay.addOverlay(overlayItem);
                if(!mapView.getOverlays().contains(mapOverlay))
                    mapView.getOverlays().add(mapOverlay);

                mapView.invalidate();
                Toast.makeText(SimpleMapMarkerActivity.this, "in press", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(SimpleMapMarkerActivity.this, "out press", Toast.LENGTH_SHORT).show();
            }
        }else if(e.getAction()==MotionEvent.ACTION_DOWN)
            isMove = false;
        else if(e.getAction()==MotionEvent.ACTION_MOVE)
            isMove = true;

        return super.onTouchEvent(e, mapView);
    }
}

【问题讨论】:

  • 我认为你的 onTouchEvent(..) 有一个小缺陷,因为你总是返回 super.onTouchEvent(..)。如文档中所述,如果您处理触摸事件,则应该返回 true,而默认实现只会返回 false。
  • 我已尝试返回 true,但地图移动已停止
  • 很明显是的,如果您跟踪从 ACTION_DOWN 到 ACTION_UP 的整个触摸手势。还有可用的 Overlay.onTap(..) 事件,您是否考虑过使用它来添加标记?
  • 是的,使用 onTap 就可以了,谢谢 harism

标签: android google-maps marker


【解决方案1】:

我遇到了同样的问题。我不确定它是否可以解决您的HTC问题。但这是我所做的:

我已经覆盖了 dispatchTouchEvent。它适用于我的三星 Galaxy s2。

    @Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    // TODO Auto-generated method stub
    if(ev.getAction() == MotionEvent.ACTION_DOWN){
        xPos = ev.getX();
        yPos = ev.getY();
    }
    if (ev.getAction() == MotionEvent.ACTION_UP){
        if (xPos==ev.getX() && yPos == ev.getY()){
        Log.i(LOG_TAG, "Calling onTouch from dispatchTouchEvent.");
            onTouch(mapView, ev);
        }
    }
    return super.dispatchTouchEvent(ev);
}

我在 mapActivity 中做这个。不在叠加层中。

【讨论】:

    【解决方案2】:

    MapMarkerExample

    此示例向您展示如何在地图上绘制可移动标记。您可以拖放标记以更改其位置。可用于您希望从用户那里获取地图位置输入的任何应用程序。

    算法:

    1.) 通过 File-> New -> Android Project 创建一个新项目,将其命名为 MapMarkerExample。 2.) 您将在 main.xml 和 android 清单文件中看到一些默认代码。 3.) 将互联网权限添加到您的清单文件或在 android.manifest 文件中写入以下内容:

    http://www.edumobile.org/android/android-apps/mapmarkerexample/

    【讨论】:

    • 我有这个例子,但运气不好
    【解决方案3】:

    我得到了解决方案和harism给出的这个解决方案

    只要您使用地图实现标记,就像点击地图并显示市场一样,然后实现onTap(GeoPoint g, MapView mapview)。

    如果您想实现标记,例如拖放等用户移动,则使用onTouch() 实现。对于onTouch() 和拖放等移动标记,请查看此链接

    http://www.edumobile.org/android/android-apps/mapmarkerexample/

    【讨论】:

      猜你喜欢
      • 2017-01-09
      • 2018-03-30
      • 1970-01-01
      • 2021-07-07
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多