ist eine mögliche Abhilfe für die Bestimmung Drag Start- und Reibungs Endereignisse:
Sie haben SupportMapFragment
oder MapFragment
zu verlängern. In onCreateView()
müssen Sie Ihre in einem benutzerdefinierten FrameLayout
(in Beispiel ist es die Klasse TouchableWrapper
), in denen Sie Touch-Ereignisse abfangen und erkennen, ob die Karte abgegriffen wird oder nicht, wickeln. Wenn Ihr onCameraChange
aufgerufen wird, überprüfen Sie einfach, ob die Kartenansicht gedrückt ist oder nicht (im Beispiel ist dies die Variable mMapIsTouched
).
Beispielcode:
UPDATE 1:
- return ursprüngliche erzeugte Ansicht in
getView()
- Verwendung
dispatchTouchEvent()
anstelle von onInterceptTouchEvent()
Customized 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);
}
}
In Ihrem individuellen 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;
}
In Ihrer Kamera ändern Callback-Methode:
private final OnCameraChangeListener mOnCameraChangeListener = new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
if (!mMapIsTouched) {
refreshClustering(false);
}
}
};
was ist mit Overlays? Haben sie noch den onTouchEvent() Callback in API v2? –
gibt es keine Überlagerung mehr. für marker und geometry objekt haben sie separate methoden eingeführt. –
Warum verwenden Sie CameraChangeListener nicht? –