Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android谷歌地图onTap不被称为_Android_Events_Maps_Call_Tap - Fatal编程技术网

Android谷歌地图onTap不被称为

Android谷歌地图onTap不被称为,android,events,maps,call,tap,Android,Events,Maps,Call,Tap,不知何故,当我点击我添加到地图上的图标时,onTap事件没有被调用,有人能告诉我为什么:S?它覆盖了我添加到地图中的所有用户,他们都有相同的图标,但标题不同。但是当我点击NothingActions时,如果Log.d发生了什么事情,我也会尝试记录它,但什么也没发生。代码如下: private class MyUsersOverlay extends ItemizedOverlay<OverlayItem> { private List<OverlayItem> m

不知何故,当我点击我添加到地图上的图标时,onTap事件没有被调用,有人能告诉我为什么:S?它覆盖了我添加到地图中的所有用户,他们都有相同的图标,但标题不同。但是当我点击NothingActions时,如果Log.d发生了什么事情,我也会尝试记录它,但什么也没发生。代码如下:

private class MyUsersOverlay extends ItemizedOverlay<OverlayItem> {
    private List<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

    public MyUsersOverlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));
    }

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

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


    public void addOverlayItem(int lat, int lon, String title, String... message) {
        GeoPoint point = new GeoPoint(lat, lon);
        OverlayItem overlayItem = new OverlayItem(point, title, null);
        addOverlayItem(overlayItem);
    }

    public void addOverlayItem(OverlayItem overlayItem) {
        mOverlays.add(overlayItem);
        populate();
    }


    @Override
    protected boolean onTap(int index)
    {
        Log.d("Test Message", "It works");
        OverlayItem item = mOverlays.get(index);

        //Do stuff here when you tap, i.e. :
        //AlertDialog.Builder dialog = new AlertDialog.Builder(cMainActivity);
        //dialog.setTitle(item.getTitle());
        //dialog.setMessage(item.getSnippet());
        //dialog.show();

        Toast.makeText(cMainActivity, item.getTitle(),
                Toast.LENGTH_SHORT).show();

        return true;
    }

    @Override
    public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)
    {
        super.draw(canvas, mapView, shadow);

        if (shadow == false)
        {
            //cycle through all overlays
            for (int index = 0; index < mOverlays.size(); index++)
            {
                OverlayItem item = mOverlays.get(index);

                // Converts lat/lng-Point to coordinates on the screen
                GeoPoint point = item.getPoint();
                Point ptScreenCoord = new Point() ;
                mapView.getProjection().toPixels(point, ptScreenCoord);

                //Paint
                Paint paint = new Paint();
                paint.setTextAlign(Paint.Align.CENTER);
                paint.setTextSize(10);
                paint.setARGB(150, 0, 0, 0); // alpha, r, g, b (Black, semi see-through)

                //show text to the right of the icon
                canvas.drawText(item.getTitle(), ptScreenCoord.x, ptScreenCoord.y+10, paint);
            }
        }
    }
私有类MyUsersOverlay扩展了ItemizedOverlay{
private List mOverlays=new ArrayList();
公共MyUsersOverlay(可绘制的默认标记){
super(boundCenterBottom(defaultMarker));
}
@凌驾
受保护的OverlayItem createItem(int i){
返回mOverlays.get(i);
}
@凌驾
公共整数大小(){
返回mOverlays.size();
}
public void addOverlayItem(int lat、int lon、字符串标题、字符串…消息){
地质点=新的地质点(纬度、经度);
OverlayItem OverlayItem=新的OverlayItem(点、标题、空);
addOverlayItem(overlayItem);
}
公共void addOverlayItem(OverlayItem OverlayItem){
添加(覆盖项);
填充();
}
@凌驾
受保护的布尔onTap(整数索引)
{
Log.d(“测试消息”,“它工作”);
OverlayItem item=mOverlays.get(索引);
//轻触时在此处执行操作,即:
//AlertDialog.Builder dialog=新建AlertDialog.Builder(CMA不活动);
//setTitle(item.getTitle());
//setMessage(item.getSnippet());
//dialog.show();
Toast.makeText(CMAIctivity,item.getTitle(),
吐司。长度(短)。show();
返回true;
}
@凌驾
公共空白绘制(android.graphics.Canvas画布、MapView MapView、布尔阴影)
{
super.draw(画布、地图视图、阴影);
if(shadow==false)
{
//循环遍历所有覆盖层
对于(int index=0;index
您是否记得将
mapView.setClickable(true);
放在
oncreate()中
methode?

如果您想单击覆盖并在常规地图视图上单击事件,这可能是一个问题。如果这是您试图实现的,请检查。即使您有不同的问题,本教程可能会帮助您解决问题。

问题不在上面的代码中,而是在其他地方。您有另一个视图从“ItemizedOverlay”中窃取
touch
事件

可能性

  • 您可能正在地图活动中玩
    dispatchTouchEvent()
    ,并始终返回
    true
    ,通知事件已被使用,不应再发送
  • 在定义
    MapView
    的布局中,您可能在
    MapView
    之后添加了一个局部覆盖它的视图。运动事件从上次添加的视图开始调度
  • 您可能已经添加了另一个覆盖
    项目化覆盖层的
    地图视图
    覆盖层

不,我没有单击常规地图视图的任何事件OK不确定这是否有帮助,但教程向您展示了如何同时执行这两个操作。不,我没有使用dispatchTouchEvent。不,我没有其他视图覆盖地图视图。我有两种类型的覆盖层MyUsersOverlay和另一种用于建筑物的覆盖层,但在两种onTap上都有t不起作用。发布另一个覆盖的代码以及您创建这两个覆盖的代码,因为在这一个上没有任何错误。请您将所有代码发布在您处理mapview的位置。OnCreate等。