当两个标记相邻时,Google Map错误标记点击事件

时间:2017-12-31 04:55:52

标签: android google-maps google-maps-api-3

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

即,

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

要重现此问题,我创建了一个单独的项目,但没有更改标记图像。我放置了两个标记("我的房子"和#34; Garage")彼此靠近,并在模拟器中运行应用程序,并使用鼠标单击准确的位置。我将鼠标放在" Garage"的中心(黑点)上。标记,并一直点击它没有移动鼠标。以下是日志。

[ 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

如您所见,即使我点击完全相同的位置,标记事件的参数也会不断变化。这是一个错误吗?

enter image description here

MainActivity

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));

enter image description here

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

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

enter image description here

现在,单击中心(黑点)不会重现问题。但点击靠近另一个标记的制造商偏离中心仍然可以解决问题。

1 个答案:

答案 0 :(得分:0)

可以在此处复制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
        );
    }