32

デフォルトでは、GoogleMap はマップのドラッグ開始とドラッグ停止のイベントを提供しません。私はすでにその問題をここで報告しました

プレーンなイベントを使って と組み合わせるカスタム を作りたいです。handleronTouchsetOnCameraChangeListener

ただし、オブジェクトonTouchのイベントにアクセスする方法が見つかりませんでした。そのようなcallbackGoogleMapは提供しません。

Google Map API v2でマップの onTouch イベントを処理するにはどうすればよいですか?

4

2 に答える 2

41

ドラッグ開始イベントとドラッグ終了イベントを決定するための可能な回避策を次に示します。

SupportMapFragmentまたは延長する必要がありMapFragmentます。で、タッチ イベントをインターセプトし、マップがタップされたかどうかを認識する、カスタマイズされた(以下の例では class ) でonCreateView()ラップする必要があります。呼び出された場合は、マップ ビューが押されているかどうかを確認します (以下の例では、これは変数です)。MapViewFrameLayoutTouchableWrapperonCameraChangemMapIsTouched

コード例:

更新 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);
        }
    }
};
于 2012-12-05T16:39:34.297 に答える