ドラッグ開始イベントとドラッグ終了イベントを決定するための可能な回避策を次に示します。
SupportMapFragment
または延長する必要がありMapFragment
ます。で、タッチ イベントをインターセプトし、マップがタップされたかどうかを認識する、カスタマイズされた(以下の例では class ) でonCreateView()
ラップする必要があります。呼び出された場合は、マップ ビューが押されているかどうかを確認します (以下の例では、これは変数です)。MapView
FrameLayout
TouchableWrapper
onCameraChange
mMapIsTouched
コード例:
更新 1:
- 元の作成されたビューを返す
getView()
dispatchTouchEvent()
の代わりに使用onInterceptTouchEvent()
カスタマイズされたフレームレイアウト:
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);
}
}
カスタマイズした 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;
}
カメラ変更のコールバック メソッドで:
private final OnCameraChangeListener mOnCameraChangeListener = new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
if (!mMapIsTouched) {
refreshClustering(false);
}
}
};