摘要:先上效果定位拖動定位定位動畫動畫結束顯示地址實現思路中心點不變,在百度地圖圖層上覆蓋自定義的定位布局拖動地圖時,隱藏地址顯示,定位標示落下來后顯示地址拿到百度地圖的拖動監聽拿到中心點經緯度,逆地理編碼即坐標轉地址具體實現布局在主界面布局上覆
先上效果:
定位+拖動定位
定位動畫
動畫結束顯示地址
實現思路中心點不變,在百度地圖圖層上覆蓋自定義的定位布局
(TextView+ImageView+ImageView)
拖動地圖時,隱藏地址顯示,定位標示落下來后顯示地址
拿到百度地圖的拖動監聽 setOnMapStatusChangeListener
拿到中心點經緯度,逆地理編碼(即坐標轉地址)mapStatus.target
具體實現: 布局:在主界面布局上覆蓋自己定位用的布局location_marker
location_marker布局:三個控件
拖動監聽
創建地理編碼檢索實例;
創建地理編碼檢索監聽者;
開始向上的動畫
停止拖動后,發起地理編碼檢索
mBaiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() { @Override public void onMapStatusChangeStart(MapStatus mapStatus) { mSearch = GeoCoder.newInstance(); mSearch.setOnGetGeoCodeResultListener(listener); startUpAnimation(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { //動畫開始時,隱藏地址顯示 tv_describe.setVisibility(View.INVISIBLE); } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } }); } @Override public void onMapStatusChangeStart(MapStatus mapStatus, int i) { } @Override public void onMapStatusChange(MapStatus mapStatus) { } @Override public void onMapStatusChangeFinish(MapStatus mapStatus) { mSearch.reverseGeoCode(new ReverseGeoCodeOption() .location(mapStatus.target)); } });
地理位置編碼檢索監聽實現:
OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() { public void onGetGeoCodeResult(GeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { //沒有檢索到結果 } //獲取地理編碼結果 } @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { //沒有找到檢索結果 Toast.makeText(MainActivity.this,"沒有找到檢索結果",Toast.LENGTH_SHORT).show(); } //獲取反向地理編碼結果 String address = result.getAddress(); System.out.println(address+"---------"); tv_describe.setText(address); startDownAnimation(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { tv_describe.setVisibility(View.VISIBLE); bounce(); } @Override public void onAnimationRepeat(Animation animation) { } }); } };三種動畫的具體實現:
需要一個變量紀錄是否向上
private boolean isUp = false; /** * 向上移動動畫 */ public void startUpAnimation(Animation.AnimationListener listener){ if (isUp){ return; } Animation animation = new TranslateAnimation( 0, 0, 0 , - 80); animation.setDuration(500); animation.setFillAfter(true);//設置為true,動畫轉化結束后被應用 animation.setInterpolator(new AccelerateDecelerateInterpolator()); iv_location.startAnimation(animation);//開始動畫 if(listener != null){ animation.setAnimationListener(listener); } isUp = true; } /** * 向下移動動畫 */ public void startDownAnimation(Animation.AnimationListener listener){ if(isUp){ Animation animation = new TranslateAnimation( 0, 0, -80, 0); animation.setDuration(500); animation.setFillAfter(true);//設置為true,動畫轉化結束后被應用 animation.setInterpolator(new AccelerateInterpolator(15)); if(listener != null){ animation.setAnimationListener(listener); } iv_location.startAnimation(animation);//開始動畫 isUp = false; } } /** * 彈跳動畫 */ public void bounce() { if (iv_location.getVisibility() == View.VISIBLE) { ObjectAnimator animator = ObjectAnimator.ofFloat(iv_location, "translationY", 0, -30, 0); animator.setInterpolator(new EasingInterpolator(EasingInterpolator.Ease.ELASTIC_IN_OUT)); animator.setDuration(1000); animator.setRepeatMode(ValueAnimator.REVERSE); animator.start(); } }定位方面參考之前文章,更新一下之前寫的MyLocationListener
新添加一個變量紀錄是否第一次定位
private boolean isFirst = true; class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { MyLocationData locData = new MyLocationData.Builder() .accuracy(bdLocation.getRadius()) // 此處設置開發者獲取到的方向信息,順時針0-360 .direction(bdLocation.getDirection()).latitude(bdLocation.getLatitude()) .longitude(bdLocation.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); String addr = bdLocation.getAddrStr(); //獲取詳細地址信息 String country = bdLocation.getCountry(); //獲取國家 String province = bdLocation.getProvince(); //獲取省份 String city = bdLocation.getCity(); //獲取城市 String district = bdLocation.getDistrict(); //獲取區縣 String street = bdLocation.getStreet(); //獲取街道信息 // showMyLocate(locData); if(isFirst){ // 開始移動百度地圖的定位地點到中心位置 LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll,16); mBaiduMap.animateMapStatus(u); isFirst = false; } } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71419.html
眾所周知,Python的一個使用場景還是比較多的,在工作當中,也會涉及到多方面的一些事情。那么,今天小編寫這篇文章的一個主要目的,給大家來介紹關于如何用Python完成百度與搞得地圖轉換,下面就給大家詳細介紹下。 一、地理編碼與逆編碼 地理編碼與逆編碼表示的是地名地址與地理坐標(經緯度)互相轉換的過程。其中,將地址信息映射為地理坐標的過程稱之為地理編碼;將地理坐標轉換為地址信息的過程稱之為...
閱讀 1695·2021-11-24 09:39
閱讀 2469·2021-11-18 10:07
閱讀 3657·2021-08-31 09:40
閱讀 3317·2019-08-30 15:44
閱讀 2628·2019-08-30 12:50
閱讀 3649·2019-08-26 17:04
閱讀 1430·2019-08-26 13:49
閱讀 1262·2019-08-23 18:05