你的屏幕变化必须在主线程或通过runOnUiThread
去
runOnUiThread(new Runnable() {
public void run() {
/////your code here
}
});
您可以添加一个睡眠(1000,0),并检查调用之间所经过的时间,使之固定利率。
public class MyUpdater extends Thread
{
long milis;
long nanos;
private ArrayList<Updatable> updatables;
public MyUpdater(long milis,long nanos)
{
super();
this.milis=milis;
this.nanos=nanos;
updatables=new ArrayList<Updatable>();
}
public void run()
{
runOnUiThread(new Runnable() {
public void run() {
long previousTime=System.nanoTime();
while(true)
{
sleep(milis,nanos);
long now=System.nanoTime();
long elapsedTime=previousTime-now;
previousTime=now;
update(elapsedTime);
}
}
});
}
public synchronized void addUpdatable(Updatable object)
{
updatables.add(object);
}
public synchronized void removeUpdatable(Updatable object)
{
updatables.remove(object);
}
private synchronized void update(long elapsedTimeNanos)
{
for(Updatable object: updatables)
{
object.onUpdate(elapsedTimeNanos);
}
}
}
您现在需要接口或基本可更新类。
public Interface Updatable
{
public void onUpdate(long elapsedTimeNanos);
}
和示例
public class MyJozanClass implements Updatable()
{
private float adjuster=0.00002f; ////you will have to adjust this depending on your ///times
float x=0;
float y=0;
public MyJozanClass()
{
}
public void onUpdate(long elapsedTimeNanos)
{
float newX=x+adjuster*elapsedTimeNanos;
float newY=y+adjuster*elapsedTimeNanos;
//////change positions
}
}
一般这种溶液是preety很像AndEngine系统。
请在LogCat中显示适当的堆栈跟踪... – TomTasche 2013-04-27 12:47:16
你以前在Android或只是java中做过吗? – 2013-04-27 12:53:31
它现在好像在工作!我使用了一些代码,这些代码是从一个答案中得到的,后来得到了低估,然后被删除了!我不知道为什么这是downvoted。也许不是最好的解决方案。 – 2013-04-27 13:07:39