1
現在、Googleマップに一連のマーカーがあります。地図上でどこからでも緯度と経度を取得できるようにしたいので、マーカーをすばやくクリックするとメッセージボックスのダイアログを開きたいと考えています。私の問題は、longpressを動作させるように設定することによって、longclickのときにonTap関数が呼び出されるようにすることです。私がマーカーをクリックしていないときにのみ、longlickが機能することは可能ですか?私はlongpressを必要としないが、他のイベントに対してlongpressを有効にしたonTapを行うことはできますか?
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
return gestureScanner.onTouchEvent(event);
//return false;
}
////////////////////////////////////
// Handle the clicking of a marker
//
////////////////////////////////////
@Override
protected boolean onTap(int index)
{
System.out.println("OnTap");
OverlayItem item = mOverlays.get(index);
int localLat = item.getPoint().getLatitudeE6();
int localLong = item.getPoint().getLongitudeE6();
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
// Get the titles
dialog.setTitle(item.getTitle());
// Get the text for the message
//dialog.setMessage(item.getSnippet());
dialog.setMessage("Latitude: " + localLat + "\nLongitude: " + localLong);
dialog.setNeutralButton("Ok", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
// TODO Auto-generated method stub
}
});
dialog.show();
return true;
}
@Override
public void onLongPress(MotionEvent e)
{
long downTime = e.getDownTime();
System.out.println("Down time: " + downTime);
System.out.println("LongPress Registered");
GeoPoint p = localMapView.getProjection().fromPixels((int) e.getX(), (int) e.getY());
System.out.println("Latitude = " + p.getLatitudeE6() + " Longitude: " + p.getLongitudeE6());
}
私はonTouchEvent()をオーバーライドしていますが、それはGestureDetectorを設定するためです。 onTapイベントを自然に発生させる方法はありますか?これはすべてItemizedOverlayに基づいています。より良いコンセプトのために秒単位でコードを投稿する。 – Geeklat
LongPressを押した座標を表示しているように見えるので、それを処理する別のオーバーレイにLongPressを移動することはどうでしょうか?一度に複数のオーバーレイを持つことができます。 GestureDetector.SimpleOnGestureListenerを使用するだけで、LongPressメソッドを実装するだけで、ItemizedOverlayからGestureDetectorを削除することができます。 – dbryson