我正在做一个应用程序,其中每10秒钟该位置出现在地图上的另一个位置,不好的地方是它对我不起作用,当我运行程序时,我看到所有位置都已经存在。但我希望每隔10秒就好像它们在移动一样逐一放置。 这是我的代码:
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
for ( contador=1;contador<=10;contador++) {
final long EXECUTION_TIME = 10000;
handler.postDelayed(new Runnable() {
@Override
public void run() {
handler.postDelayed(this, EXECUTION_TIME);
}
}, EXECUTION_TIME);
mMap.addMarker(new MarkerOptions().position(obtenerLatLong(contador)).title("Mi Hogar").snippet("Municipio").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(obtenerLatLong(contador), 17));
}
}
有什么办法吗?
答案 0 :(得分:0)
这可以尝试:
final long EXECUTION_TIME = 10000;
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
int i=0;
@Override
public void run() {
i=i+1;
mMap.addMarker(new MarkerOptions().position(obtenerLatLong(contador)).title("Mi Hogar").snippet("Municipio").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(obtenerLatLong(contador), 17));
if(i==10){
handler.removeCallbacks(this);
}
}
}, EXECUTION_TIME);
答案 1 :(得分:0)
您的处理程序除了启动其他处理程序外什么也不做,您必须在addMarker
内进行moveCamera
和run()
调用,并在run()
结束时启动下一个postDelayed
。您可以使用int进行计数并查看您在循环中的位置,并仅在此int小于10的情况下启动另一个处理程序。(在这里,我使用cpt
来做到这一点)
final long EXECUTION_TIME = 10000;
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
int cpt = 1;
@Override
public void run() {
/* old
* mMap.addMarker(new MarkerOptions().position(obtenerLatLong(contador)).title("Mi Hogar").snippet("Municipio").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));
* mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(obtenerLatLong(contador), 17));
*/
//new
mMap.addMarker(new MarkerOptions().position(obtenerLatLong(cpt)).title("Mi Hogar").snippet("Municipio").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(obtenerLatLong(cpt), 17));
cpt++;
if(cpt <= 10)
handler.postDelayed(this, EXECUTION_TIME);
}
}, EXECUTION_TIME);