使用 TimerTask 在谷歌地图中设置地图
Posted
技术标签:
【中文标题】使用 TimerTask 在谷歌地图中设置地图【英文标题】:set map in google maps with TimerTask 【发布时间】:2013-08-04 01:53:08 【问题描述】:我想在谷歌地图 v2 中更改地图的位置
但我已经在 TimerTask 中完成了...目标、缩放、方位等等,它说
"IllegalStateException - 不在主线程上
我该怎么办?有什么帮助吗?
class Task extends TimerTask
@Override
public void run()
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(Zt) // Sets the center of the map to Mountain View
.zoom(12) // Sets the zoom
.bearing(180) // Sets the orientation of the camera to east
.tilt(30) // Sets the tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
mMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
Timer timer = new Timer();
timer.scheduleAtFixedRate(new Task(), 0, 20000);
【问题讨论】:
您无法在主/ui 线程之外更新用户界面。这可能会有所帮助:***.com/questions/7010951/… 非常感谢 - 它有效 :) 【参考方案1】:计时器任务在与 UI 线程不同的线程上运行。在 android 中,不允许从非 UI 线程执行 UI 操作。使用runOnUiThread
方法向UI线程发送操作:
class Task extends TimerTask
@Override
public void run()
runOnUiThread(new Runnable()
@Override
public void run()
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(Zt) // Sets the center of the map to Mountain View
.zoom(12) // Sets the zoom
.bearing(180) // Sets the orientation of the camera to east
.tilt(30) // Sets the tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
mMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new Task(), 0, 20000);
【讨论】:
以上是关于使用 TimerTask 在谷歌地图中设置地图的主要内容,如果未能解决你的问题,请参考以下文章