2010-10-27 97 views
0

我有一個mapview,我希望在longclick時顯示一個ContextMenu,但到目前爲止我找到的最接近的解決方案是here on anddev,我不喜歡該方法的主要原因是因爲任何點擊激活ContextMenu代替長按。使用ContextMenu創建MapView而不覆蓋

問:

有沒有顯示地圖的文本菜單不使用疊加的方法嗎?爲什麼?

回答

2

這是我使用的方法。我創建了一個擴展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; 
} 

}

希望這有助於。

+0

你花時間和編寫代碼的努力爲你的指導和幫助謝謝你! – Necronet 2010-11-05 04:02:00

+0

沒問題,我很高興它有幫助。很高興回饋。 – Bear 2010-11-05 12:34:59

0

可能值得嘗試爲mapView編寫onKeyLongPress方法。爲此,您必須創建另一個擴展MapView的類,然後使用新類代替MapView。只需要有一個默認的構造函數,它遵循超級構造函數。如果你讓它產生超類的構造函數,Eclipse會自動爲你創建它。

從那裏,重寫onKeyLongPress,讓它調用通常會顯示菜單的任何方法。

0

onKeyLongPress就是這個意思。一把鑰匙被壓下。你想要做的是實現一個GestureListener。下面是關於如何獲取工作的例子:

GestureListener Example

當然,所有的你得到的是將要以像素爲單位,所以你需要向對方表明,進入你的地圖空間得到Lat Long網的信息。