我正在android应用程序中开发订单跟踪模块,在这个模块中,我实现了一个源位置标记和目的地位置标记,源位置是固定的,而目的地位置标记是不断变化的,每当位置改变时,但是当位置改变时,标记从一个位置跳到另一个位置,移动不顺畅, 实际上我正在删除上一个标记并在新位置创建新标记, 有什么方法可以平滑移动标记或者我可以更新以前的标记位置吗?请帮我。
这是代码 fragment 。
public void updatePackageLoc(){
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
while(updatelocation) {
Track_Location();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
if (package_marker != null && package_newlat != 0.0 && package_newlon != 0.0) {
package_marker.remove();
LatLng position = new LatLng(package_newlat, package_newlon);
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(position,14f));
package_marker = googleMap.addMarker(new MarkerOptions().position(position).icon(BitmapDescriptorFactory.fromResource(R.drawable.pacage)));
}
}
});
}
}
};
new Thread(runnable).start();
}
最佳答案
这对我有用,将 FinalPosition 声明为全局变量并在 Track_location 函数中更新。
public void updatePackageLoc(){
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
while(updatelocation) {
Track_Location();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
long elapsed;
float t;
float v;
@Override
public void run() {
// Calculate progress using interpolator
elapsed = SystemClock.uptimeMillis() - start;
t = elapsed / durationInMs;
v = interpolator.getInterpolation(t);
// Log.d("order_track",startPosition.toString()+ " " +finalPosition.toString());
LatLng currentPosition = new LatLng(
startPosition.latitude*(1-t)+finalPosition.latitude*t,
startPosition.longitude*(1-t)+finalPosition.longitude*t);
package_marker.setPosition(currentPosition);
// Repeat till progress is complete.
if (t < 1) {
// Post again 16ms later.
handler.postDelayed(this, 16);
}
}
});
}
}
};
new Thread(runnable).start();
}
关于android - 顺利更新谷歌地图上的标记位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35332968/