当两个标记相邻时,Google 地图错误的标记单击事件

2024-01-14

我已经为标记应用了自定义 PNG 图像(与默认标记聚类器圆的大小大致相同),并且发生了这种奇怪的事情。当两个标记靠近时(但即使它们不重叠),我需要点击一个标记两次,因为第一次点击错误地给了我前一个标记。

That is,

  • 有两个标记 A 和 B 彼此靠近。
  • 我点击 A,然后我得到一个带有 A 的标记点击事件。
  • 然后,我点击 B,但我得到了 A 的标记点击事件。
  • 如果我再次 Tab B,那么我会收到 B 的标记点击事件。

为了重现这个问题,我创建了一个单独的项目,并且没有更改标记图像。我将两个标记(“我的房子”和“车库”)彼此靠近放置,并在模拟器中运行该应用程序,并使用鼠标单击准确的位置。我将鼠标放在“车库”标记的中心(黑点)上并不断单击它without移动鼠标。下面是日志。

[ 12-31 13:42:24.509 28921:28921 D/         ]
Garage is clicked

[ 12-31 13:42:25.664 28921:28921 D/         ]
My house is clicked

[ 12-31 13:42:26.819 28921:28921 D/         ]
Garage is clicked

[ 12-31 13:42:28.066 28921:28921 D/         ]
My house is clicked

[ 12-31 13:42:29.333 28921:28921 D/         ]
Garage is clicked

[ 12-31 13:42:30.503 28921:28921 D/         ]
My house is clicked

正如您所看到的,即使我单击了完全相同的位置,标记事件的参数仍在不断变化。这是一个错误吗?

主要活动

class MainActivity : AppCompatActivity(), OnMapReadyCallback
{
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val mapFragment = this.supportFragmentManager.findFragmentById(
                R.id.mapView) as SupportMapFragment;
        mapFragment.getMapAsync(this)
    }

    var mMap:GoogleMap? = null;

    override fun onMapReady(p0: GoogleMap?)
    {
        mMap = p0;

        var marker = MarkerOptions()
        marker.position(LatLng(51.501518, -0.141847));
        marker.title("My house");
        p0?.addMarker(marker);

        var marker2 = MarkerOptions()
        marker2.position(LatLng(51.501518, -0.142300));
        marker2.title("Garage");
        p0?.addMarker(marker2);

        p0?.setOnMarkerClickListener {
            marker ->
            Log.d("", marker.title + " is clicked")
            true;
        }
    }
}

XML

<fragment
    android:id="@+id/mapView"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="8dp"
    map:uiZoomControls="true"
    map:cameraTargetLat="51.501518"
    map:cameraTargetLng="-0.141847"
    map:cameraZoom="16"/>

PS:似乎不必那么相邻。我尝试了这些值,但它仍然发生。

    marker.position(LatLng(51.501518, -0.141847));
    marker2.position(LatLng(51.501518, -0.142500));

然后,我进一步将两者分开,直到,

    marker.position(LatLng(51.501518, -0.141847));
    marker2.position(LatLng(51.501518, -0.142800));

现在,单击中心(黑点)并没有重现该问题。但是,单击靠近另一个标记的制造商的偏心位置仍然会重现该问题。


在这里可以100%重现。我找到了一个解决方法,只需将反向 zIndex 设置为 MarkerOptions 即可。

    for (int i = 0; i < locations.size(); i++) {
        Marker marker = mGoogleMap.addMarker(new MarkerOptions()
            .position(latLng)
            .zIndex(locations.size() - 1 - i) // this avoids the bug when the bottom marker is selected
        );
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当两个标记相邻时,Google 地图错误的标记单击事件 的相关文章

随机推荐