Google Maps API手势不起作用(缩放旋转......)

时间:2016-11-17 08:54:43

标签: android google-maps pinchzoom

编辑:我发现我的问题在下面看到了我的答案

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

添加+/-符号进行缩放
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
    }
}

谢谢

3 个答案:

答案 0 :(得分: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
}

希望它可以帮助某人:)

答案 1 :(得分:1)

评论此行

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

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

googleMap.getUiSettings().setAllGesturesEnabled(true);

答案 2 :(得分:0)

就我而言,它有助于设置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();
    }