我正在构建一个Android应用程序,我必须在一个日期/时间跟踪用户,并逐个使用折线部署制造商? 作为对服务器的响应,我在列表中接收多个lat / lang。现在我想逐个部署它们,就像正在播放的视频我知道如何添加标记我只想控制部署.Eg标记A在2秒后部署标记B应该部署并与标记A连接聚合-line,标记C,D也是如此。我应该如何实现这一目标。定时器,线程?任何帮助或参考,algos,将是伟大的,虽然我搜索了这样的例子,我还没有找到它。 提前致谢
答案 0 :(得分:0)
您可以使用Handler执行此任务。
我正在为您发布一个示例,我没有运行它,但我希望它能成功运行:
private final Handler mHandler = new Handler(Looper.getMainLooper());
private List<LatLng> mLatLngs;
private PutMarkerRunnable mRunnable;
private int mNoOfMarkersPlaced = -1;
private void showMarkers(List<LatLng> latLngs) {
mLatLngs = latLngs;
mHandler.post(mRunnable);
}
private class PutMarkerRunnable implements Runnable {
@Override
public void run() {
// write code to add marker
map.addMarker();
mNoOfMarkersPlaced++;
if (mNoOfMarkersPlaced != mLatLngs.size()) {
// scheduling next marker to be placed after 3 seconds
mHandler.postDelayed(mRunnable, 3000);
}
}
}
答案 1 :(得分:0)
好的感谢社区..但我终于能够做到这一点了。标记正确,因为这对我有用!
首先,我们使用..来设置相机的动画。
CameraPosition cameraPosition =
new CameraPosition.Builder()
.target(new LatLng(0,0))
.bearing(45)
.tilt(90)
.zoom(googleMap.getCameraPosition().zoom)
.build();
googleMap.animateCamera(
CameraUpdateFactory.newCameraPosition(cameraPosition),
ANIMATE_SPEEED_TURN,
new CancelableCallback() {
@Override
public void onFinish() {
}
@Override
public void onCancel() {
}
}
);/**
*
* Callback that highlights the current marker and keeps animating to the next marker, providing a "next marker" is still available.
* If we've reached the end-marker the animation stops.
*
*/
CancelableCallback simpleAnimationCancelableCallback =
new CancelableCallback(){
@Override
public void onCancel() {
}
@Override
public void onFinish() {
if(++currentPt < markers.size()){
CameraPosition cameraPosition =
new CameraPosition.Builder()
.target(targetLatLng)
.tilt(currentPt<markers.size()-1 ? 90 : 0)
//.bearing((float)heading)
.zoom(googleMap.getCameraPosition().zoom)
.build();
googleMap.animateCamera(
CameraUpdateFactory.newCameraPosition(cameraPosition),
3000,
simpleAnimationCancelableCallback);
highLightMarker(currentPt);
}
}
};
可以在2个android.location.Location对象之间计算方位。当我们在这里使用com.google.android.gms.maps.model.LatLng对象时,我们首先需要将它们转换为Location对象。
private Location convertLatLngToLocation(LatLng latLng) {
Location location = new Location("someLoc");
location.setLatitude(latLng.latitude);
location.setLongitude(latLng.longitude);
return location;
}
一旦我们有2个Location对象,我们就可以计算出2之间的方位。这是我们在转换到目标时需要放在Camera上的(endLocation)。
private float bearingBetweenLatLngs(LatLng beginLatLng,LatLng endLatLng) {
Location beginLocation = convertLatLngToLocation(beginLatLng);
Location endLocation = convertLatLngToLocation(endLatLng);
return beginLocation.bearingTo(endLocation);
}
我们将使用该数字来计算中间点的坐标。一旦我们有了这些坐标,我们就会将跟踪标记设置为新的位置。
long elapsed = SystemClock.uptimeMillis() - start;
double t = interpolator.getInterpolation((float)elapsed/ANIMATE_SPEEED);
double lat = t * endLatLng.latitude + (1-t) * beginLatLng.latitude;
double lng = t * endLatLng.longitude + (1-t) * beginLatLng.longitude;
LatLng intermediatePosition = new LatLng(lat, lng);
trackingMarker.setPosition(intermediatePosition); 我们还将使用新的标记位置更新折线,在折线上创建拖尾效果。
private void updatePolyLine(LatLng latLng) {
List<LatLng> points = polyLine.getPoints();
points.add(latLng);
polyLine.setPoints(points);
}