【发布时间】:2019-04-02 13:16:10
【问题描述】:
所以我想检查节点是否在特定范围内,如果是,则绘制它们。 在计时器内检查节点,因此创建了一个线程。现在唯一的问题是必须从 UI 线程调用方法 setRenderable()。那么有没有办法绕过呢?我需要这个在一定的时间间隔内更新,这就是我创建计时器的原因。
public void updateNodes()
{
Camera camera = arFragment.getArSceneView().getScene().getCamera();
timer = new Timer();
timer.schedule(new TimerTask(){
int last = 0;
int copy_last = 0;
@Override
public void run(){
Vector3 camera_position = camera.getWorldPosition();
// We're checking all nodes for distance between them
for(Node al : copied_nodes_list){
if(last<copy_last) last++;
else if(countDistanceOfNodes(al,camera_position)<3.0 && copy_last >= last) {
al.setRenderable(andyRenderable);
last++;
copy_last = last;
}
else {
al.setRenderable(andyRenderable);
}
}
last = 0;
}
},0,250);
}
【问题讨论】:
-
GUI 框架是否没有自己的“Timer”类在 GUI 线程上“触发”定时事件? (例如,Swing 框架有
javax.swing.Timer) -
我正在使用谷歌的 ARCore,我找不到任何表现得像计时器的方法。这是文档。 developers.google.com/ar/reference/java/sceneform/reference/com/…
-
@SolomonSlow 我发现有一个名为 runOnUiThread() 的 android 方法。你认为这能解决这个案子吗?唯一的问题是我必须传递一个可运行的,而不是计时器。
-
几乎一样好:这意味着你需要两个
Runnables;让第一个被计时器调用,然后让它将第二个提交给runOnUiThread()。
标签: java multithreading arcore ui-thread