Oto możliwe obejście dla ustalania rozpoczęcia i zakończenia drag drag zdarzenia:
Trzeba rozszerzyć SupportMapFragment
lub MapFragment
. W onCreateView()
musisz zawinąć swój MapView
w niestandardowym FrameLayout
(w przykładzie poniżej jest to klasa TouchableWrapper
), w którym przechwytujesz zdarzenia dotykowe i rozpoznaje, czy mapa jest tapnięty, czy nie. Jeśli Twój telefon zadzwoni onCameraChange
, po prostu sprawdź, czy widok mapy jest wciśnięty, czy nie (w przykładzie poniżej jest to zmienna mMapIsTouched
).
Przykład Kod:
UPDATE 1:
- powrotu oryginalny utworzony w widoku
getView()
- zastosowanie
dispatchTouchEvent()
zamiast onInterceptTouchEvent()
Dostosowane FrameLayout:
private class TouchableWrapper extends FrameLayout {
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mMapIsTouched = true;
break;
case MotionEvent.ACTION_UP:
mMapIsTouched = false;
break;
}
return super.dispatchTouchEvent(ev);
}
}
W dostosowanego MapFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
mOriginalContentView = super.onCreateView(inflater, parent, savedInstanceState);
mTouchView = new TouchableWrapper(getActivity());
mTouchView.addView(mOriginalContentView);
return mTouchView;
}
@Override
public View getView() {
return mOriginalContentView;
}
w aparacie metody zmiana callback:
private final OnCameraChangeListener mOnCameraChangeListener = new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
if (!mMapIsTouched) {
refreshClustering(false);
}
}
};
co z nakładkami? Czy nadal mają wywołania zwrotne onTouchEvent() w API v2? –
nie ma już nakładki. dla obiektu markerowego i geometrycznego wprowadzili oddzielne metody. –
dlaczego nie używasz CameraChangeListener? –