24

我一直在寻找有关实施 OnMarkerClickListener 的帮助,但我发现没有任何效果。这是我在下面的标记,点击后它只会改变颜色(浅蓝色)。我正在寻找它以打开一个更大的窗口,以便我可以输入更多信息。这可能吗?

     googlemap.addMarker(new MarkerOptions()
    .position(new LatLng(49.378,-0.3904))
    .title("Hello World")
    .snippet("This is my test app")    
    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));

标记在我的地图上运行良好,但现在我想单击标记并打开一个新的活动/页面或更大的窗口,这更容易使用。由于我是制作应用程序的真正新手,如果有人成功获得了工作示例,请您提供链接或一些代码。

提前致谢!

编辑:

从建议的教程中,我更改了一些 MainActivity.java。

我在 OnMarkerClickListener 中添加并选择将未实现的方法添加到公共类

  public class MainActivity extends Activity implements LocationListener, OnMarkerClickListener {

在 private void setUpMap() 下面我添加到我的代码中:private Marker myMarker、setonMarkerclick 监听器和 myMarker =,:

       private Marker myMarker;
         {
googlemap.setOnMarkerClickListener(this);

myMarker = googlemap.addMarker(new MarkerOptions()
    .position(new LatLng(LatLng))
    .title("Hello World")
    .snippet("My First App")    
    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));

 }

在底部的未实现方法中,我有:

   @Override
   public boolean onMarkerClick(Marker arg0) {
// TODO Auto-generated method stub 

return false;

我需要在公共 Boolean OnMarkerClick 部分中进行哪些更改?我没有收到任何错误,但它只是不起作用。我还需要添加或更改什么?

任何帮助表示赞赏!

4

5 回答 5

31

标记点击事件

在android map v2中单击后不要捕捉到标记

引用上面的帖子

您可以使用 anOnMarkerClickListener来监听标记上的点击事件。要在地图上设置此侦听器,请调用 GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)。当用户单击标记时,将调用 onMarkerClick(Marker) 并将标记作为参数传递。此方法返回一个布尔值,指示您是否已使用该事件(即,您想要抑制默认行为)。如果它返回 false,那么除了您的自定义行为之外,还将发生默认行为。标记单击事件的默认行为是显示其信息窗口(如果可用)并移动相机以使标记位于地图的中心。

https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener

在标记上使用 OnMarkerClickListener。

检查代码片段的链接

Google Maps API v2:如何使标记可点击?

示例:在我的手机上工作

    标记源、目的地;
    谷歌地图mMap;

    mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
    源 = mMap.addMarker(新 MarkerOptions()
            .position(sc)
            .title("我的家")
            .snippet("班加罗尔")
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));

    目的地 = mMap.addMarker(new MarkerOptions()
            .位置(液化天然气)
            .title("枫叶熊总公司")
            .snippet("Jayanager")
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));

    mMap.setOnMarkerClickListener(标记-> {
        if (marker.getTitle().equals("MyHome")) // 如果标记源被点击
            Toast.makeText(MainActivity.this, marker.getTitle(), Toast.LENGTH_SHORT).show();// 显示toast
        返回真;
    });

于 2013-05-19T14:41:39.377 回答
10

此代码处理制造商单击事件并加载包含一些信息的新布局 (XML):

/**
 * adding individual markers, displaying text on on marker click on a
 * bubble, action of on marker bubble click
 */
private final void addLocationsToMap() {
    int i = 0;
    for (Stores store : storeList) {
        LatLng l = new LatLng(store.getLatitude(), store.getLongtitude());

        MarkerOptions marker = new MarkerOptions()
                .position(l)
                .title(store.getStoreName())
                .snippet("" + i)
                .icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
        googleMap.addMarker(marker);
        ++i;
    }

    googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

        @Override
        public void onInfoWindowClick(Marker marker) {

            try {
                popUpWindow.setVisibility(View.VISIBLE);
                Stores store = storeList.get(Integer.parseInt(marker
                        .getSnippet()));

                // set details
                email.setText(store.getEmail());
                phoneNo.setText(store.getPhone());
                address.setText(store.getAddress());

                // setting test value to phone number
                tempString = store.getPhone();
                SpannableString spanString = new SpannableString(tempString);
                spanString.setSpan(new UnderlineSpan(), 0,
                        spanString.length(), 0);
                phoneNo.setText(spanString);

                // setting test value to email
                tempStringemail = store.getEmail();

                SpannableString spanString1 = new SpannableString(tempStringemail);
                spanString1.setSpan(new UnderlineSpan(), 0, spanString1.length(), 0);
                email.setText(spanString1);

                storeLat = store.getLatitude();
                storelng = store.getLongtitude();

            } catch (ArrayIndexOutOfBoundsException e) {
                Log.e("ArrayIndexOutOfBoundsException", " Occured");
            }

        }
    });

}
于 2013-12-09T07:31:21.520 回答
6

如果您需要在市场中单击事件,此代码就是解决方案。

private GoogleMap mGoogleMap;


mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
        {

            @Override
            public boolean onMarkerClick(Marker arg0) {
                if(arg0 != null && arg0.getTitle().equals(markerOptions2.getTitle().toString())); // if marker  source is clicked
                    Toast.makeText(menu.this, arg0.getTitle(), Toast.LENGTH_SHORT).show();// display toast
                return true;
            }

        });

祝你好运

于 2016-03-06T04:34:13.840 回答
0

我建议使用 OnInfoWindowClickListener,它会在您单击标记然后单击片段时触发。使用 setTag 将任何对象附加到标记。

    Marker marker = mMap.addMarker(markerOptions);
    marker.setTag(myObject);

和听众

      mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

        @Override
        public void onInfoWindowClick(Marker arg0) {

         MyObject mo =  (MyObject )arg0.getTag();


           }
       });
于 2020-03-29T23:43:17.130 回答
0

当用户单击标记以执行任何操作时,以下代码用于 Kotlin

        googleMap!!.setOnMarkerClickListener { marker ->
            if (marker.title == "Marker1")
                Log.d(TAG, "Clicked on Marker1")
            true
        }
于 2020-12-06T20:23:27.303 回答