作者lovelycateye (我还想要更多力量)
看板java
标题Re: [问题] ANDROID GOOGLE MAP 的问题
时间Wed Nov 24 22:01:22 2010
※ 引述《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
1F:推 orzreynold:辛苦了! 11/25 03:17
2F:→ lovelycateye:话说今天踩了一个ItemizedOverlay的雷,想知道再问 11/25 08:30
3F:→ lovelycateye:刚刚又踩到一个MapActivity的Process问题了 囧> 11/25 11:54