国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

百度地圖的使用-定位—逆地理編碼(即坐標轉地址)

tylin / 3033人閱讀

摘要:先上效果定位拖動定位定位動畫動畫結束顯示地址實現思路中心點不變,在百度地圖圖層上覆蓋自定義的定位布局拖動地圖時,隱藏地址顯示,定位標示落下來后顯示地址拿到百度地圖的拖動監聽拿到中心點經緯度,逆地理編碼即坐標轉地址具體實現布局在主界面布局上覆

先上效果:

定位+拖動定位

定位動畫

動畫結束顯示地址

實現思路

中心點不變,在百度地圖圖層上覆蓋自定義的定位布局
(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的一個使用場景還是比較多的,在工作當中,也會涉及到多方面的一些事情。那么,今天小編寫這篇文章的一個主要目的,給大家來介紹關于如何用Python完成百度與搞得地圖轉換,下面就給大家詳細介紹下。  一、地理編碼與逆編碼  地理編碼與逆編碼表示的是地名地址與地理坐標(經緯度)互相轉換的過程。其中,將地址信息映射為地理坐標的過程稱之為地理編碼;將地理坐標轉換為地址信息的過程稱之為...

    89542767 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<