Re: [問題] ANDROID GOOGLE MAP 的問題
※ 引述《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
11/25 08:30, 2F
→
11/25 11:54, , 3F
11/25 11:54, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):