编辑:我发现我的问题在下面看到了我的答案
原帖:
我正在创建一个包含地图的活动,但我无法添加缩放和其他手势功能。我可以双击放大,我可以通过
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
}
}
谢谢
答案 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();
}