亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android Map Api 使用和開發(2) 定位我的位置、

系統 1927 0

上篇把界面畫出來了, 接下來就是顯示里面的功能了,那這篇內容就比較豐富了。

主要有這么幾道菜:

1、在地圖上彈出泡泡顯示信息,并且能相應泡泡的點擊時間

2、自動定位當前位置(也就是我的位置) --添加了 GPS定位和基站定位。

3、獲取經緯度對應的接到地址名稱

那下面就開始代碼把,理論知識能講多少是多少。


一 、 地圖彈出泡泡的制作

1 、overlay_popup.xml 直接把layout放出來

還有泡泡的效果圖 ,很多同學做項目都是時間很緊張的,別人貼出來代碼都覺得不夠直觀,有截圖是王道,

順應大部分懶人的習慣,我編截圖邊發:

Android Map Api 使用和開發(2) 定位我的位置、地圖彈出泡泡、通過經緯度獲取地址

看到了吧, 泡泡上有title ,有 desc ,還有一個小icon。我把整個layout 設置成:

android:clickable="true" android:focusable="true"

這樣這個layout就相當余一個button了,可以點擊。

2、那代碼怎么實現呢? FzMapActivity里加入下面代碼

在進入主界面是 初始化一下view。

private View popView;當然這個變量定義也不能少。

3、自定義itemizedOverlay MyItemizedOverlay

好把,先把代碼放出來,光描述怎么寫太費勁了。

主要是繼承 OnFocusChangeListener 監聽地圖層的變化, 為了方便監聽button事件也繼承了OnClickListener。

下面這方法監聽這個層改變的時間,把泡泡彈出來。

public void onFocusChanged(ItemizedOverlay overlay, OverlayItem newFocus) {

Log.d(TAG , "item focus changed!");

if (null != newFocus) {

Log.d(TAG , "centerY : " + itemDrawable.getBounds().centerY() + "; centerX :" + itemDrawable.getBounds().centerX());

Log.d(TAG , " height : " + itemDrawable.getBounds().height());

MapView.LayoutParams params = (MapView.LayoutParams) mPopView.getLayoutParams();

params.x = this.layout_x;//Y軸偏移

params.y = this.layout_y;//Y軸偏移

point = newFocus.getPoint();

params.point = point;

mMapCtrl.animateTo(point);

TextView title_TextView = (TextView) mPopView.findViewById(R.id.map_bubbleTitle);

title_TextView.setText(newFocus.getTitle());

TextView desc_TextView = (TextView) mPopView.findViewById(R.id.map_bubbleText);

if(null == newFocus.getSnippet() || "".equals(newFocus.getSnippet())){

desc_TextView.setVisibility(View.GONE);

}else{

desc = newFocus.getSnippet();

desc_TextView.setText(desc);

desc_TextView.setVisibility(View.VISIBLE);

}

RelativeLayout button = (RelativeLayout) mPopView.findViewById(R.id.map_bubblebtn);

button.setOnClickListener(this);

mMapView.updateViewLayout(mPopView, params);

mPopView.setVisibility(View.VISIBLE);

selectItem = newFocus;

}

}

二、長按地圖獲取地圖位置并彈出泡泡顯示信息

它的繼承關系 LongPressOverlay extends Overlay implements OnDoubleTapListener

LongPressOverlay這個層主要是用來接收長按事件 和雙擊地圖界面的

@Override

public void onLongPress(MotionEvent e) {

mContext.locPoint = mMapView.getProjection().fromPixels((int) e.getX(),

(int) e.getY());

mHandler.sendEmptyMessage(mContext.MSG_VIEW_LONGPRESS);

}接收到長按事件后給主界面發消息,由主界面處理。

三、FzLocationManager 這個類用來做gps,基站定位

public interface LocationCallBack{

/**

* 當前位置

* @param location

*/

void onCurrentLocation(Location location);

}

定義一個接口 ,當監聽到位置變化時,回調主界面

//locationListener注冊監聽器到位置服務管理里

networkLocationManager.requestLocationUpdates(

LocationManager.NETWORK_PROVIDER, MINTIME, MININSTANCE,

locationListener);

//位置信息變化回調

private void updateLocation(Location location) {

lastLocation = location;

mCallback.onCurrentLocation(location);

}

四、主界面邏輯

主界面有

部分注釋寫在代碼里了

最后再上一張截圖,在室內通過基站定位到我的位置:

Android Map Api 使用和開發(2) 定位我的位置、地圖彈出泡泡、通過經緯度獲取地址

五、通過經緯度獲取地址

這個單獨拷貝出來讓大家看看。這個方法獲取地址有時候獲取不到的,google好像對這個接口有限制。說白了就這這個接口不靠譜。

大家可以嘗試用別的方法或手段獲取地址

我的代碼里加了個死循環去獲取位置,這樣的方案是不可取的,不過暫時用一下看看效果也好。

/**

*通過經緯度獲取地址

* @param point

* @return

*/

private String getLocationAddress(GeoPoint point){

String add = "";

Geocoder geoCoder = new Geocoder(getBaseContext(),

Locale.getDefault());

try {

List<Address> addresses = geoCoder.getFromLocation(

point.getLatitudeE6() / 1E6, point.getLongitudeE6() / 1E6, 1);

Address address = addresses.get(0);

int maxLine = address.getMaxAddressLineIndex();

if(maxLine >= 2){

add = address.getAddressLine(1) + address.getAddressLine(2);

}else {

add = address.getAddressLine(1);

}

} catch (IOException e) {

add = "";

e.printStackTrace();

}

return add;

}

好了,以上是所有代碼, AndroidManifest.xml 在 (一)里有。

最后小結

用google的api獲取到的位置放到他的地圖上是有偏差的,而且偏差還比不小,大家可以觀察一下,這個問題沒有很好的免費解決方案。

如果有哪位有什么好建議可以發出來,謝謝。

用基站和gps定位是,也沒有處理那個是更好的定位的問題。

歡迎大家提建議

Android Map Api 使用和開發(2) 定位我的位置、地圖彈出泡泡、通過經緯度獲取地址


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品永久免费视频观看 | 国产欧美日韩网站 | 色久悠悠在线观看 | 99热久久这里只有精品2010 | 亚洲国产精品久久婷婷 | 欧美日韩高清观看一区二区 | 亚洲视频免 | 精品视频自拍 | 国产精品久久久久久久久久一区 | 青青青手机版视频在线观看 | 宅男在线影院 | 久久久久久午夜精品 | 免费高h影片在线观看 | 国产精品久久亚洲不卡动漫 | 欧美一区二区三区久久久 | 九九免费精品视频 | 亚洲精品国产字幕久久不卡 | 日韩免费片| 97影院不用 | 99亚洲乱人伦精品 | 欧美一级片免费 | 一级女性全黄生活片免费 | 夜夜夜夜夜夜夜猛噜噜噜噜噜噜 | 亚洲国产成人在线观看 | 国产成人综合网在线观看 | 国产精品你懂的在线播放 | 欧美久久亚洲精品 | 亚洲成人国产 | 久久精品国产国产精品四凭 | 亚洲精品国产一区二区图片欧美 | 亚洲精品久久久中文字幕 | 99热影视| 久久久青草青青国产亚洲免观 | 免费久久| 亚洲女人逼 | 国产第一福利影院 | chinese在线播放91国内 | 免费看欧美理论片在线 | 成人免费观看视频久爱网 | 前任4在线观看 | 国产精品久久久久久爽爽爽 |