无法在Android中的谷歌地图V2上的标记的自定义信息窗口上获得点击事件

时间:2014-06-04 14:27:32

标签: android google-maps google-maps-markers infowindow

我正在通过此reference在标记上显示自定义infoWindow。 现在我可以显示自定义infoWindow了 enter image description here

但问题是我无法在每个按钮上获得右键单击事件。 例如当我点击button1时,它会调用button2的touchlistener,依此类推。 我的代码是:

this.button1Listener = new OnInfoWindowElemTouchListener(
            button1, getResources().getDrawable(
                    R.drawable.ic_plusone_medium_off_client),
            getResources().getDrawable(
                    R.drawable.ic_plusone_tall_off_client)) {
        @Override
        protected void onClickConfirmed(View v, Marker marker) {
            // Here we can perform some action triggered after clicking the
            // button

            Toast.makeText(MapActivity.this, "Button1", Toast.LENGTH_SHORT)
                    .show();

        }
    };

this.button2Listener = new OnInfoWindowElemTouchListener(
                button2, getResources().getDrawable(
                        R.drawable.ic_plusone_medium_off_client),
                getResources().getDrawable(
                        R.drawable.ic_plusone_tall_off_client)) {
            @Override
            protected void onClickConfirmed(View v, Marker marker) {
                // Here we can perform some action triggered after clicking the
                // button

            Toast.makeText(MapActivity.this, "Button2", Toast.LENGTH_SHORT)
                    .show();

        }
    };

this.button3Listener = new OnInfoWindowElemTouchListener(
                button3, getResources().getDrawable(
                        R.drawable.ic_plusone_medium_off_client),
                getResources().getDrawable(
                        R.drawable.ic_plusone_tall_off_client)) {
            @Override
            protected void onClickConfirmed(View v, Marker marker) {
                // Here we can perform some action triggered after clicking the
                // button

            Toast.makeText(MapActivity.this, "Button3", Toast.LENGTH_SHORT)
                    .show();

        }
    }; and so on.......




this.button1.setOnTouchListener(button1Listener);
        this.button2.setOnTouchListener(button2Listener);
        this.button3.setOnTouchListener(button3Listener);
        .......
        // googleMap.setInfoWindowAdapter(null);
        googleMap.setInfoWindowAdapter(new InfoWindowAdapter() {

        // Use default InfoWindow frame
        @Override
        public View getInfoWindow(Marker marker) {

            return null;
        }

        // Defines the contents of the InfoWindow
        @Override
        public View getInfoContents(Marker marker) {

            button1Listener.setMarker(marker);
            button2Listener.setMarker(marker);
            button3Listener.setMarker(marker);
            ......

            // We must call this to set the current marker and infoWindow
            // references
            // to the MapWrapperLayout
            mapWrapperLayout.setMarkerWithInfoWindow(marker, infoWindow);
            return infoWindow;

        }

    });

请告诉我,我做错了什么? 有时代码工作得很好,但大部分时间它都不起作用。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

Google地图V2中的InfoWindow是一个图像,该库将所有这些图像呈现为图像。阅读maps Android API v2中“自定义信息窗口”中的“注意”。

所以你添加的所有按钮都不起作用。

如果你真的想这样做,你必须做一些代码。我找到了一个here

答案 1 :(得分:0)

最后,我解决了按钮点击事件不匹配的问题。 问题出在这里。

// MapWrapperLayout initialization
    // 39 - default marker height
    // 20 - offset between the default InfoWindow bottom edge and it's content bottom edge 
    mapWrapperLayout.init(map, getPixelsFromDp(this, 39 + 20)); 

所以我改变了:

 mapWrapperLayout.init(map, getPixelsFromDp(this, 39 + 20)); 

mapWrapperLayout.init(map, getPixelsFromDp(this, 0)); 

因此,infowindow底边与其内容之间不会有任何偏差。

我希望这会对某人有所帮助。