1. 程式人生 > >仿滴滴多個車輛平滑移動效果

仿滴滴多個車輛平滑移動效果

仿滴滴多個車輛平滑移動效果

我們先看下效果圖:

image

apk下載地址

掃我下載apk:

image

優勢:

  1. 可以使用普通的Marker類,不用再使用高德提供的SmoothMoveMarker。
  2. 可以返回的車輛行駛角度。(這個角度是根據兩個點座標來計算出來)。
  3. 跟Marker類解耦

關鍵類 MoveUtils 提供的方法如下。



    /**
     *  
     * @param list 座標陣列
     * @param time 時間   毫秒 多長時間走完這些陣列
     * @param isContinue 是否在以上次停止後的座標點繼續移動 當list.size()=1 
     * 注意:如果呼叫 startMove(list,time,isContinue) 如果list.size=1 只傳遞了一個點並且isContinue=false
     那麼 onSetGeoPoint回撥方法返回的角度是0 因為只有一個點是無法計算角度的
     */
    public void startMove(List<LatLng> list, int time, boolean isContinue)
    
    
    
    
    /**
     * 
     * @param latLng 座標
     * @param time   時間 毫秒
     * @param isContinue 是否在以上次停止後的座標點繼續移動 當list.size()=1 isContinue 就會變的非常有用
     * 注意:如果呼叫 startMove(list,time,isContinue) 如果list.size=1 只傳遞了一個點並且isContinue=false
     那麼 onSetGeoPoint回撥方法返回的角度是0 因為只有一個點是無法計算角度的
     */
    public void startMove(LatLng latLng, int time, boolean isContinue)
    
    
    /**
     *  停止移動
     */
    public void stop()
    
    
    
    /**
     *  釋放工具類 
     */
    public void destory()
    
    
    /**
     * 設定監聽回撥
     * @param callBack OnCallBack
     */
    public void setCallBack(OnCallBack callBack)
    
    
    
     public interface OnCallBack {

        /**
         * 設定座標IPoint
         * <p>
         * 角度返回  這裡的角度返回是根據兩個點的座標來計算的
         * 並不是感測器返回的 
         * 
         *
         *
         * @param point  IPoint
         * @param rotate 角度
         */
        void onSetGeoPoint(IPoint point, float rotate);
    }

如何使用

Demo程式碼


    moveUtils = new MoveUtils();
      
      
    moveUtils.setCallBack(new MoveUtils.OnCallBack() {
            @Override
            public void onSetGeoPoint(IPoint point, float rotate) {
                if (!marker.isRemoved()) {
                    marker.setGeoPoint(point);
                    //獲取實際車輛方向。
                    float carDirection = 360.0F - rotate + getAMap().getCameraPosition().bearing;
                    marker.setRotateAngle(carDirection);
                }


            }
        });
        
        
          moveUtils.startMove(list, 5000, fasle);



原始碼

MoveUtils

MoveUtils原始碼

CustomAnimator

CustomAnimator原始碼

原始碼下載地址

原始碼下載地址