私のアプリで地図を1本の指で物事をポケモンにして360度回転できるようにするために、私は以下の解決策を考え出しました。Googleマップ:Googleマップでのイベントの検出と移動
マップにonTouchListenerが設定されていないため、マップを含むフラグメント全体を表示し、onTouchListenerを追加しました。次のコードは、ユーザーが1本の指をドラッグすると地図を回転させ、実際にはかなりうまく動いています。
previousMapTouchX = 0.0f;
previousMapTouchY = 0.0f;
coveringView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
float x = motionEvent.getX();
float y = motionEvent.getY();
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_MOVE:
Log.e("MAP", "MOVE");
float dx = x - previousMapTouchX;
float dy = y - previousMapTouchY;
// reverse direction of rotation above the mid-line
if (y > coveringView.getHeight()/2) {
dx = dx * -1 ;
}
// reverse direction of rotation to left of the mid-line
if (x < coveringView.getWidth()/2) {
dy = dy * -1 ;
}
CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude()),
googleMap.getCameraPosition().zoom, MAX_TILT,
googleMap.getCameraPosition().bearing + ((dx + dy) * TOUCH_SCALE_FACTOR)));
googleMap.moveCamera(cameraUpdate);
break;
case MotionEvent.ACTION_DOWN:
Log.e("MAP", "DOWN");
return false;
}
previousMapTouchX = x;
previousMapTouchY = y;
return true;
}
});
問題は、しかし、私はマップを回転させることができながら、上部のビューはタッチイベントのすべてを消費しているので、マーカーは、アンタッチャブルになるということです。そこで、MotionEvent.ACTION_DOWNが検出された場合にfalseを返すケースを追加しました。ただし、これは、ACTION_MOVEアクションの前に必ずACTION_DOWNアクションを実行するため、マップ回転コードに決して到達しないことを意味します。
地図を回転させることなく、マップマーカーを選択できないか、地図マーカーを選択できない状態で、地図を適切に回転できる状況に陥っています。
どのように私はこの作業を得るかもしれないかに関する提案はありますか? GoogleマップがonTouchListenerを持つことができれば、ずっと簡単です。
作品!あまりにも多くのAntonio – Dportology