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

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

系統(tǒng) 2247 0

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

主要有這么幾道菜:

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

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

3、獲取經(jīng)緯度對應(yīng)的接到地址名稱

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


一 、 地圖彈出泡泡的制作

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

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

順應(yīng)大部分懶人的習(xí)慣,我編截圖邊發(fā):

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

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

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

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

2、那代碼怎么實現(xiàn)呢? FzMapActivity里加入下面代碼

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

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

3、自定義itemizedOverlay MyItemizedOverlay

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

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

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

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;

}

}

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

它的繼承關(guān)系 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);

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

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

public interface LocationCallBack{

/**

* 當前位置

* @param location

*/

void onCurrentLocation(Location location);

}

定義一個接口 ,當監(jiān)聽到位置變化時,回調(diào)主界面

//locationListener注冊監(jiān)聽器到位置服務(wù)管理里

networkLocationManager.requestLocationUpdates(

LocationManager.NETWORK_PROVIDER, MINTIME, MININSTANCE,

locationListener);

//位置信息變化回調(diào)

private void updateLocation(Location location) {

lastLocation = location;

mCallback.onCurrentLocation(location);

}

四、主界面邏輯

主界面有

部分注釋寫在代碼里了

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

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

五、通過經(jīng)緯度獲取地址

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

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

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

/**

*通過經(jīng)緯度獲取地址

* @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 在 (一)里有。

最后小結(jié)

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

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

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

歡迎大家提建議

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天做天天爱天天综合网 | 国产精品久久久久久久伊一 | 3www黄| 青草香蕉精品视频在线观看 | 成人免费草草视频 | 在线中文字幕亚洲 | 久久久久久亚洲精品不卡 | 欧美在线观看一区二区三 | 久久综合噜噜激激的五月天 | 成在线人免费视频一区二区三区 | 精品久久久久久18免费看 | 午夜精品久久影院蜜桃 | 国产亚洲欧美精品久久久 | 伊人影院99 | 欧美一级毛片在线一看 | 久久综合五月 | 国产伦一区二区三区四区久久 | 日韩欧美毛片免费观看视频 | 久久婷婷国产麻豆91天堂 | 日本视频h | 欧美另类性视频在线看 | 免费一级网站 | 777色狠狠一区二区三区 | 800玖玖爱在线观看香蕉 | 亚洲欧美日韩综合 | 国产高清在线精品二区一 | 天堂成人在线视频 | 四虎永久地址4hu2019 | 奶交性视频欧美 | 综合久久色 | 日韩欧美在线视频 | 老子不卡影院 | 久草新免费 | 老司机深夜福利影院 | 妞干网这里只有精品 | 亚洲精品字幕一区二区三区 | 国产真实自拍 | 桃花综合 | 亚洲综合精品香蕉久久网 | 国产精品亚洲一区二区三区久久 | 请看一下欧美一级毛片 |