仿滴滴多个车辆平滑移动效果
我们先看下效果图:
![](https://img.haomeiwen.com/i2442375/c52147e2242d2ef6.gif)
扫我下载apk:
![](https://img.haomeiwen.com/i2442375/ff90bffb7aeaca5f.png)
优势:
- 可以使用普通的Marker类,不用再使用高德提供的SmoothMoveMarker。
- 可以返回的车辆行驶角度。(这个角度是根据两个点坐标来计算出来)。
- 跟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
CustomAnimator
源码下载地址
网友评论