你的屏幕變化必須在主線程或通過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