我在OnMarkerClickListener中返回true时如何激活地图工具栏?

时间:2017-09-15 05:37:12

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

返回true到onMarkerClick会消耗该事件,但我们会丢失infoWindow显示,地图工具栏和相机定位。

然后我知道我是否愿意:

  1. 使用以下方法定位相机:mMap.moveCamera()
  2. 显示infoWindows使用方法:mMarker.showInfoWindow();
  3. 如果我尝试来显示地图工具栏,我会使用:mMap.getUiSettings().setMapToolbarEnabled(true);
  4.   

    但显然使用第3点中的句子不足以显示地图工具栏。那么我可以在代码中添加什么呢?知道在onMarkerClick中我将返回true,当我返回false时,默认情况下会给出所有三个函数。

    public boolean onMarkerClick(Marker marker) {
            mMap.animateCamera(
                    CameraUpdateFactory.newLatLngZoom(ROOTS, 16),  //update
                    2000, //durationMs
                    new GoogleMap.CancelableCallback() {
                        @Override
                        public void onFinish() {
                            markerRoots.showInfoWindow();
                            mMap.getUiSettings().setMapToolbarEnabled(true); //NOT SUFFICIENT
                        }
                        @Override
                        public void onCancel() {
                        }
                    }
            );
            return true;
        }
    

    如果有什么不明白的地方,请告诉我。

    此致

3 个答案:

答案 0 :(得分:0)

无法以编程方式显示地图工具栏。

这可以是一种解决方法,手动创建地图工具栏并创建意图以启动Google地图。

See this answer

答案 1 :(得分:0)

临时解决方案

我的目的是:

  • 首次点击标记以执行动画
  • 然后动画会自动显示infoWindow和地图工具栏。

但由于我无法自动完成,因此代码是我,具体取决于缩放和标记上至少两次点击。

然后在动画之前,相机变焦将具有值。所以我使用mMap.getCameraPosition().zoom;得到它并根据缩放进行评估,如果我能够使用该事件(返回true )或执行默认行为(返回false ),即显示地图的infoWindow和工具栏。

执行和互动流程:

  1. 点击标记。
  2. 执行动画( zoom = 16.0 )。
  3. 点击标记。
  4. 如果zoom==16.0,则显示imageViews。
  5. 然后,通过与地图交互来修改缩放。
  6. 第1项。

    public boolean onMarkerClick(final Marker marker) {
    
        //Activate the default behavior after the animation and when clicking
        float zoom = mMap.getCameraPosition().zoom;
        if (zoom == 16.0) {
            mMap.getUiSettings().setMapToolbarEnabled(true);
            return false;
        }
    
        mMap.animateCamera(
                CameraUpdateFactory.newLatLngZoom(ROOTS, 16),  //update
                2000, //durationMs
                new GoogleMap.CancelableCallback() {   
                    @Override
                    public void onFinish() {
                        //Disable the toolbar after the animation                            
                        mMap.getUiSettings().setMapToolbarEnabled(false);
                    }
                    @Override
                    public void onCancel() {
                    }
                }
        );
        return true;
    }
    
  7.   

    事件的答案取决于缩放,无论是默认应用行为还是自定义行为。

答案 2 :(得分:0)

目前尚无解决方案...当setOnMarkerClickListener返回true工具栏不可见时。 对我来说最好的选择:

mMap.setOnMarkerClickListener(marker -> {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                marker.showInfoWindow();
                //mMap.animateCamera to some point like this
               Point targetPoint = new Point(marker.x, marker.y - 350);
               LatLng targetPosition = projection.fromScreenLocation(targetPoint);
               mMap.animateCamera(CameraUpdateFactory.newLatLng(targetPosition), 100, null);
            }
        }, 100);
        // MOST IMPORTANT
        return false;
    });