我有我想根據從地圖中心的範圍,以簡化房間的覆蓋。Android的谷歌地圖API檢測位置變化
我想檢測當前地圖中心的變化,這樣如果一個人不斷地四處移動地圖,平移到另一個地區,我可以簡化房間,並在新的領域重新填充數據。
是否有這樣的監聽器或我將不得不創建一個線程來定期檢查地圖中心?
我有我想根據從地圖中心的範圍,以簡化房間的覆蓋。Android的谷歌地圖API檢測位置變化
我想檢測當前地圖中心的變化,這樣如果一個人不斷地四處移動地圖,平移到另一個地區,我可以簡化房間,並在新的領域重新填充數據。
是否有這樣的監聽器或我將不得不創建一個線程來定期檢查地圖中心?
我忘記了它的名字.....你必須閱讀API文檔.....但也有性能/定義boundries(以經/緯度而言)的MapActivity的方法當前顯示的地圖,您可以使用它來確定中心值是什麼。如果GPS正在報告用戶當前處於XXX值,但他們已將地圖平移到將計算的中心YYYY遠離GPS報告位置的方向,那麼您可以確定「地圖距離中心有多遠」現在定位。順便說一下,在做數學時使用大圓法。
我覺得這樣的事情可能會奏效
當你第一次加載地圖得到了投影和存儲視圖的中間的中心的GeoPoint使用的MapView的投影類顯示在地圖上
mapPosition = myMapView.getProjection().fromPixels(x,y)
將返回與X一個GeoPoint,Y在這種情況下,XY必須的MapView的
他中心擴展MapView類
public myMapView extends Mapview { }
所以,你可以重寫onDispatchDraw
在這種方法中,你可以檢查是否縮放級別已經改變,若沒有則可能是因爲地圖正在平搖,可能是我想依賴於你的其他原因是做什麼,但我們有理由認爲最重畫是盤如果排除放大
比較與您保存在啓動時的一個畫面中心的當前投影的GeoPoint。如果它符合您的距離標準,請執行您的邏輯並更新mapPosition地理點。
如果我明白你的問題正確這樣的事情應該工作。當然,如果你不想檢查每一次重繪,那麼你也可以過度使用擴展課程的其他成員,也可以使用動作事件,但是你說你遇到了問題。
UPDATE:
你也許能夠在MapView的一個自定義容器直接做到這一點VS但我在過去做的是覆蓋dispatchTouchEvent上的MapView生活中的擴展容器類,在這種情況下的FrameLayout所以
public class myFrameLayout extends FrameLayout {
然後那裏面我用這樣的跟蹤觸碰動作的狀態,我將其降低到應該工作的最低要求,「模式」是我創建枚舉,你會在哪裏做 邏輯就是當我們呃擡起手指在案件陳述的底部
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_POINTER_UP: // Second Finger
case MotionEvent.ACTION_DOWN: // First finger
mode = GESTURE_MODE.PRE_DRAG;
break;
case MotionEvent.ACTION_MOVE:
if (GESTURE_MODE.PRE_DRAG == mode) // Pan
mode = GESTURE_MODE.DRAG;
else
{
}
break;
case MotionEvent.ACTION_POINTER_DOWN:
mode = GESTURE_MODE.MULTI_TOUCH;
break;
case MotionEvent.ACTION_UP: // All fingers removed
if (GESTURE_MODE.DRAG == mode)
{
// DO YOUR PANNING MOVED FAR LOGIC HERE
}
mode = GESTURE_MODE.NONE;
break;
}
return super.dispatchTouchEvent(event);
}
是的我使用大圓投影方法計算距離經緯度座標。如果可能的話,我想使用觸摸偵聽器。我試過這個......但它似乎沒有工作。 mapV.setOnTouchListener(新的OnTouchListener(){ 公共布爾onTouch(視圖v,MotionEvent事件){... – lostdev