Re: [問題] ANDROID GOOGLE MAP 的問題

看板java作者 (我還想要更多力量)時間15年前 (2010/11/24 22:01), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《rexmouse4v (環島失敗.....囧)》之銘言: : 開發環境是 : JDK6 : Eclipse 3.6 : 跑GOOGLE的模擬器是 API LEVEL3 : 檔案在這裡 : http://www.aimedia.com.tw/java/GoogleMaps.rar : 裡面XML的位子可能要改一下 : 其他沒啥問題 : 有些問題想請教版上的先進 : MapsActivity.java裡面 : 1. : 64行: : getZoomControls() 被劃掉了 : 為了解決他所以Eclipse提醒我前面加上 @SuppressWarnings("deprecation") : 不是很了= =...可以解釋一下嗎 請將程式改為 mapView.setBuiltInZoomControls(true); 那東西已經過時了。 不知道deprecation的意思可以用google翻譯,他會翻給你, 這種事情以後請發揮學習精神查一下就會知道了。 : 2. : 我有註記一段有問題的 : 我的想法是 : 當我拖曳地圖的時候 : 我想要跑一段程式(那段程式先以 Toast 代替) : 但是我拖曳地圖他不理我 : 我想知道為什麼...是目標錯了嗎 : 3. : 我想要在縮放地圖的時候同時觸發一段函式 : 去大神上找大概都是找給妳 : 縮放地圖的工具 Android的MapView並沒有提供你地圖範圍變更時會觸發的事件(iPhone的MKMapView才有) 因此你必須要自己extends MapView然後自己去接相對應的事件 extends MapView後 大致上如下: 在建構子裡面如下 mapController_ = this.getController(); this.getZoomButtonsController().setOnZoomListener(new ZoomButtonsController.OnZoomListener() { @Override public void onVisibilityChanged(boolean visible) { } @Override public void onZoom(boolean zoomIn) { if(zoomIn) { mapController_.zoomIn(); } else { mapController_.zoomOut(); } mapRegionChanged(); } }); 然後Override public boolean onTouchEvent(MotionEvent ev) { super.onTouchEvent(ev); //看你想怎麼判斷地圖有沒有移動 /* 可以用 switch(ev.getAction) { case MotionEvent.ACTION_DOWN: //你的程式判斷 case MotionEvent.ACTION_MOVE: //你的程式判斷 case MotionEvent.ACTION_UP: //你的程式判斷怎樣該觸發mapRegionChanged(); //請記得Map本身有Bounce所以請用this.postDelayed(Runnable, millisec); //大約1000毫秒左右吧? } */ return true; } 另外寫個function private void mapRegionChanged() { //在這邊做你想做的 } 在layout(你的main.xml)改成用你自己寫的MapView : 我想要的 : 按+- => 地圖縮放 => 觸發 AAA(); ? 沒看到 : -------------------------------------------------------------- : GeoItemizedOverlay.java 裡面 : 1. : 唯一有問題的是在 onTap : 他會要求FORCE CLOSE : 然後就升天了 : 沒有頭緒.... : 請大師指點 沒有頭緒? 你有看你的錯誤訊息嗎!?請把你的LogCat打開好嗎? 在Window > ShowView > Other > Android > LogCat 你先看看你的程式碼吧,你的ItemizedOverlay裡面的mContext根本就是個null 我完全沒看到你程式哪邊有把context傳進去,這樣當然會丟NullPointerException。 另外我建議你用 mItemizedOverlay.setOnFocusChangeListener(new OnFocusChangeListener(){ @Override public void onFocusChanged(ItemizedOverlay overlay, OverlayItem newFocus) { if(null == newFocus) { /* 這邊如果你沒點到任何OverlayItem的話 newFocus會是null,所以你只要判斷是不是null就可以做相對的事情了。 我會建議你想要顯示AlertDialog的地方放在這 */ } else { } } }); : 2. : 其中有一段 : public GeoItemizedOverlay(Drawable defaultMarker, Context context) { : super(defaultMarker); : mContext = context; : }; : 對各位來說或許是很基本的觀念 : 但是我還是想問...因為大神的解釋有看沒懂 : Context context 的意義是什麼 : 有沒有「實體」的例子 : 那在這段裡面 : 此時的 Context context 又是指什麼 你的這個建構子完全沒用到 你根本沒設context。另外這篇文章有提到一些使用Context的觀念。 http://developer.android.com/resources/articles/avoiding-memory-leaks.html : 3. : public int size() { : // TODO Auto-generated method stub : return mOverlays.size(); : }; : 我覺得我被網頁語言的觀念搞混了 : 在網頁的世界 : 不管有沒有作用...函示放在那當沒差 java也是一樣啊=3= : 但是在這裡 : size()並沒有被提到 : 要return給誰 : mOverlays嗎 : 拿掉他的話整個 public class 就錯了 : WHY?? : 以上的一些問題 : 還望各位大師賜教 http://code.google.com/intl/zh-TW/android/add-ons/google-apis/reference/com/ google/android/maps/ItemizedOverlay.html 懶的縮,自己貼。 API上面開宗明義就寫著, public abstract class ItemizedOverlay<Item extends OverlayItem> 他有一些abstract的方法要你去實做他 例如size() 這真的就是基礎Java的觀念了。 另外如果你有仔細看過API他會跟你說size這個方法在populate()會去叫到 最後,程式碼排版好累! 這篇文章糾竟會值多少呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.129.251

11/25 03:17, , 1F
辛苦了!
11/25 03:17, 1F

11/25 08:30, , 2F
話說今天踩了一個ItemizedOverlay的雷,想知道再問
11/25 08:30, 2F

11/25 11:54, , 3F
剛剛又踩到一個MapActivity的Process問題了 囧>
11/25 11:54, 3F
文章代碼(AID): #1CxHgsvP (java)
文章代碼(AID): #1CxHgsvP (java)