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

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條評論
主站蜘蛛池模板: 亚洲午夜久久久精品影院视色 | 欧洲做视频在线观看 | 日韩一区二区精品久久高清 | 尤物视频国产 | 青青久在线精品视频 | 日韩精品成人a在线观看 | 奇米久久久 | 伊人伊狠亚洲综合影院 | 性感美女一级毛片 | 亚洲欧美成人在线 | 国产在线精品一区二区高清不卡 | 国产理论精品 | 一级毛片私人影院老司机 | 又爽又黄又无遮挡的视频在线观看 | 欧美日韩中文字幕 | 久久精品国产免费 | 羞羞视频网站在线观看 | 国产一区在线观看免费 | 日韩中文欧美 | 免费国产一区二区三区四区 | 成年人黄色在线观看 | 亚洲最大网 | 亚洲精品一区二区三区福利 | 国产尤物在线播放 | 精品无人区乱码一区二区三区手机 | 国产一区视频在线免费观看 | 天天射日 | 久久国产精品-久久精品 | a亚洲欧美中文日韩在线v日本 | 奇米狠狠| 一级毛片aa高清免费观看 | 久久网综合 | 欧美在线一区二区三区精品 | 久色亚洲| 雅虎日本免费一区二区三区 | 综合色久 | 日韩一级欧美一级一级国产 | 国产99久久亚洲综合精品 | 免费超级淫片日本高清视频 | 日韩一区精品视频在线看 | 国产成人精品2021欧美日韩 |