我有一個mapview,我希望在longclick時顯示一個ContextMenu,但到目前爲止我找到的最接近的解決方案是here on anddev,我不喜歡該方法的主要原因是因爲任何點擊激活ContextMenu代替長按。使用ContextMenu創建MapView而不覆蓋
問:
有沒有顯示地圖的文本菜單不使用疊加的方法嗎?爲什麼?
我有一個mapview,我希望在longclick時顯示一個ContextMenu,但到目前爲止我找到的最接近的解決方案是here on anddev,我不喜歡該方法的主要原因是因爲任何點擊激活ContextMenu代替長按。使用ContextMenu創建MapView而不覆蓋
問:
有沒有顯示地圖的文本菜單不使用疊加的方法嗎?爲什麼?
這是我使用的方法。我創建了一個擴展MapActivity的AbstractMap類。然後,我從AbstractMap類擴展到創建適合我需求的Map。注意我只使用這種方法,因爲我需要幾個具有不同屬性的地圖用於我的應用程序。您可以簡單地從AbstractMap中移除Abstract關鍵字,直接覆蓋此類中的OnGestureListener方法並實例化它。
這裏是AbstractMap類
public abstract class AbstractMap extends MapActivity implements OnGestureListener, OnDoubleTapListener {
public MapView mapView;
public MapController mapController;
public List<Overlay> mapOverlays;
private GestureDetector detector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.mapp);
detector = new GestureDetector(this, this);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setOnTouchListener(otl);
mapController = mapView.getController();
mapOverlays = mapView.getOverlays();
} catch (Exception e) {
Log.e("Error", "Exception", e);
}
}
public OnTouchListener otl = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (detector.onTouchEvent(event))
return true;
else
return false;
}
};
}
這裏是LongPressMap
public class LongPressMap extends AbstractMap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onDown(MotionEvent event) {
return false;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
//Log.d("Debug","On Scrtoll");
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
希望這有助於。
可能值得嘗試爲mapView編寫onKeyLongPress方法。爲此,您必須創建另一個擴展MapView的類,然後使用新類代替MapView。只需要有一個默認的構造函數,它遵循超級構造函數。如果你讓它產生超類的構造函數,Eclipse會自動爲你創建它。
從那裏,重寫onKeyLongPress,讓它調用通常會顯示菜單的任何方法。
onKeyLongPress就是這個意思。一把鑰匙被壓下。你想要做的是實現一個GestureListener。下面是關於如何獲取工作的例子:
當然,所有的你得到的是將要以像素爲單位,所以你需要向對方表明,進入你的地圖空間得到Lat Long網的信息。
你花時間和編寫代碼的努力爲你的指導和幫助謝謝你! – Necronet 2010-11-05 04:02:00
沒問題,我很高興它有幫助。很高興回饋。 – Bear 2010-11-05 12:34:59