Google マップ フラグメントの onDrag リスナーをセットアップしようとしていますが、ドラッグ イベントを発生させることができません。マップはドラッグ イベントを直接サポートしていないため、ビューのドラッグ リスナーを実装しようとしています。onMarkerDrag イベントについては知っていますが、マーカーを移動しようとしていないので、それは役に立ちません。
マップ ドラッグ イベントをトラップする理由は 2 つあります。
ユーザーがマップをパンしたかどうかを最初に検出します。そうでない場合は、その場所を画面に表示したままにし、地図上にない場合はその場所に合わせてアニメーション化します。彼らが地図をパンした場合、私は彼らが見たいものを知っていると思い、画面上の場所を強制します. (これはAPIに含めるべきもののようです)
トラッピングの 2 つ目の理由は、ユーザーがマップ上に線や多角形を描画できるようにすることです。これは onTap イベント (ポイントの追加) で実行できますが、フリーハンドでも実行できるようにしたいと考えています。
私のコードは次のようになります。
主な活動:
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
setUpMapIfNeeded();
mMapView = findViewById(R.id.map);
myMapDragListener = new MapDragListener();
mMapView.setOnDragListener(myMapDragListener);
リスナー:
public class MapDragListener implements OnDragListener {
/**
*
*/
public MapDragListener() {
super();
say.logCat("MapDragListener: I'm ALIVE!!!!");
}
private AkamaiAnnounce say = new AkamaiAnnounce();
private boolean inDrag;
private boolean hasPanned=false;
@Override
public boolean onDrag(View v, DragEvent event) {
say.logCat("MapDragListener.onDrag: " + event.toString());
//String dotTAG = (String) getTag();
if (event.getLocalState() != this) {
return false;
}
boolean myResult = true;
int action = event.getAction();
float x = event.getX();
float y = event.getY();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
inDrag = true;
break;
case DragEvent.ACTION_DRAG_LOCATION:
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
myResult = false;
break;
case DragEvent.ACTION_DRAG_ENDED:
inDrag = false; // change color of original dot back
hasPanned=true;
break;
default:
myResult = false;
break;
}
return false;
//return myResult;
}
public boolean hasPanned() {
return hasPanned;
}
public void setHasPanned(boolean hasPanned) {
this.hasPanned = hasPanned;
}
}
マップは正常に動作します。リスナーはインスタンス化されますが、私の onDrag イベントは発生しません。何か案は?