【问题标题】:Google Maps API gestures not working (zoom-rotate...)Google Maps API 手势不起作用(缩放旋转...)
【发布时间】:2017-07-22 23:13:09
【问题描述】:

编辑:我发现了我的问题,请参阅下面的答案

原帖:
我正在创建一个包含地图的活动,但我无法添加缩放和其他手势功能。我可以双击放大,我可以添加 +/- 符号来放大

googleMap.getUiSettings().setAllGesturesEnabled(true);

这是我的代码:

活动的 xml (tracking_order.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<fragment
    android:id="@+id/mapFragment"
    class="com.example.OrderMapFragment"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="3" />

<FrameLayout
    android:id="@+id/clientsFragment"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1" />

OrderMapFragment.java

public class OrderMapFragment extends SupportMapFragment implements OnMapReadyCallback, GoogleMap.OnMarkerClickListener {

    public static OrderMapFragment newInstance() {
        OrderMapFragment fragment = new OrderMapFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        ((OrderMapFragment.OnOrderMarkerClickListener) context).setMapObject(this);
        getMapAsync(this);
    }

    @Override
    public void onMapReady(final GoogleMap googleMap) {
        googleMap.getUiSettings().setZoomControlsEnabled(true); //this one is working
        googleMap.getUiSettings().setZoomGesturesEnabled(true); //not working

        googleMap.getUiSettings().setAllGesturesEnabled(true);  //not working
        // ... (removed code used to fetch markers data)
    }

    @Override
    public boolean onMarkerClick(Marker marker) {
        return listener.filterListByMarker(marker);
    }

    public interface OnOrderMarkerClickListener {
        /**
         * Action to be taken when a marker has been clicked
         *
         * @param marker
         * @return true if the listener has consumed the event (i.e., the default behavior should not occur);
         * false otherwise (i.e., the default behavior should occur).
         * The default behavior is for the camera to move to the marker and an info window to appear.
         */
        boolean filterListByMarker(Marker marker); //the class that implements this doesn't do anything for now it just returns false
    }
}

谢谢

【问题讨论】:

    标签: android google-maps pinchzoom


    【解决方案1】:

    评论这一行

    googleMap.getUiSettings().setZoomGesturesEnabled(true); //not working
    

    现在你试试,它会起作用的。如果您需要任何特定或少数手势方式,请单独启用,否则如果您需要全部只需调用此行

    googleMap.getUiSettings().setAllGesturesEnabled(true);
    

    【讨论】:

    • 起初我试过没有任何 3 行。然后我尝试了setZoomControlsEnabled,但这不是我需要的,然后我分别尝试了其他每个人,但都没有奏效。然后我把它们都放在这里问了问题
    【解决方案2】:

    我终于找到了问题:
    包含mapFragment 的活动正在扩展一个自定义类。该类已覆盖以下方法:

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_UP) {
            return super.dispatchTouchEvent(ev);
        }
        if (ev.getPointerCount() > 1)  //here was the problem
            return true;
        return super.dispatchTouchEvent(ev);
    }
    

    所以我创建了一个方法并将其更改为:

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_UP) {
            return super.dispatchTouchEvent(ev);
        }
        if (ev.getPointerCount() > 1 && !enableMultiTouch())
            return true;
        return super.dispatchTouchEvent(ev);
    }
    
    protected boolean enableMultiTouch(){
        return false;  //and override it to true in my activity
    }
    

    希望它可以帮助某人:)

    【讨论】:

      【解决方案3】:

      在我的例子中,它有助于设置 map.getUiSettings().setAllGesturesEnabled(true); 并覆盖 MapView documentation 中描述的生命周期方法:

          @Override
          public void onCreate(Bundle bundle) {
              super.onCreate(bundle);
              mapView.onCreate(bundle);
          }
      
          @Override
          public void onSaveInstanceState()
          {
              super.onSaveInstanceState();
              mapView.onSaveInstanceState();
          }
      
          @Override
          public void onPause()
          {
              super.onPause();
              mapView.onPause();
          }
      
          @Override
          public void onStart()
          {
              super.onStart();
              mapView.onStart();
          }
      
          @Override
          public void onResume()
          {
              super.onResume();
              mapView.onResume();
          }
      
          @Override
          public void onLowMemory()
          {
              super.onLowMemory();
              mapView.onLowMemory();
          }
      
          @Override
          public void onDestroy()
          {
              super.onDestroy();
              mapView.onDestroy();
          }
      
          @Override
          public void onStop()
          {
              super.onStop();
              mapView.onStop();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多