我正在做一个应用程序,其中每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));
}
}
有什么方法?
您的处理程序除了启动其他处理程序外什么都不做,您必须在run()
内部和run()
末尾启动下一个postDelayed
的addMarker
和moveCamera
调用。您可以使用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);
这将有效尝试:
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);