在Android Studio中每10秒显示一次位置

时间:2019-05-10 11:57:04

标签: android google-maps location

我正在做一个应用程序,其中每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));

    }
}

有什么办法吗?

2 个答案:

答案 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内进行moveCamerarun()调用,并在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);