在 Android Studio 中每 10 秒显示一次位置
Posted
技术标签:
【中文标题】在 Android Studio 中每 10 秒显示一次位置【英文标题】:Show location every 10 seconds in Android Studio 【发布时间】:2019-09-28 08:11:41 【问题描述】:我正在做一个应用程序,其中位置每 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));
有什么办法吗?
【问题讨论】:
【参考方案1】:您的处理程序除了启动其他处理程序之外什么都不做,您必须在run()
内调用addMarker
和moveCamera
,并在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);
【讨论】:
我把它和你一样,只留下一次。我试图把它放在一个while循环中,这样我就可以标记其余的但什么也不做。我要你拨 10 次,但只标记第一次 我(我不确定你想要什么,如果你只想移动相机 10 次,只需将addMarker
调用放在处理程序之外,顺便说一下我没有更新它但您可能希望我的cpt
变量为countador
,所以当您调用obtenerLatLong()
时,它实际上是从1 循环到10
是的,cpt 就像一个计数器,每转一圈都会在地图上显示一个新的标记。只是在添加 while 循环时,它会立即对我执行所有操作,就好像它不尊重每个标记的 10 秒时间。
我编辑了我的代码以在任何地方使用cpt
,试试吧,不要把它放在while循环中【参考方案2】:
这将起作用尝试它:
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);
【讨论】:
但是我怎么知道我是否执行了 10 次?我认为需要一个循环,就像我在问题中一样。 int i=0; // 这被认为是循环执行了 10 次。 if(i==10) // 检查循环是否执行了 10 次,然后通过调用 -> handler.removeCallbacks(this); 删除循环; 尝试根据您的情况进行更改,它会起作用。如果遇到任何问题,请告诉我。 我把它和你一样,只留下一次。我试图把它放在一个while循环中,这样我就可以标记其余的但什么都不做。以上是关于在 Android Studio 中每 10 秒显示一次位置的主要内容,如果未能解决你的问题,请参考以下文章