我現在有(其中包括)這些類:舉止怪異與Android的。睡眠動畫()的onTouchEvent
public class Main extends Activity {
Panel p;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
p = new Panel(this);
setContentView(p);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
p.onTouchEvent(event);
// Make your UI thread sleep.
try {
Thread.sleep(30);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
和
public class Panel extends SurfaceView implements SurfaceHolder.Callback {
private ViewThread mThread;
private ArrayList<GraphicsElement> mElements = new ArrayList<GraphicsElement>();
public static int panelHeight;
public static int panelWidth;
private int numberOfElements = 0;
private Paint mPaint;
public Panel(Context context) {
super(context);
getHolder().addCallback(this);
mThread = new ViewThread(this);
mPaint = new Paint();
mPaint.setColor(Color.CYAN);
mPaint.setTextSize(20);
}
public void doDraw(long elapsed, Canvas canvas) {
canvas.drawColor(Color.parseColor("#003045"));
if (!(mElements.size() > 15)) {
synchronized (mElements) {
for (GraphicsElement element : mElements) {
element.doDraw(canvas);
}
canvas.drawText("FPS: " + Math.round(1000f/elapsed) + " Elements: " + numberOfElements, 10, 30, mPaint);
}
} else {
mElements.clear();
numberOfElements = 0;
}
}
public void animate(long elapsedTime) {
synchronized (mElements) {
for (GraphicsElement element : mElements) {
element.animate(elapsedTime);
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
int xspeed = 0;
int yspeed = 0;
if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE) {
if (event.getX() > panelWidth/2) {
xspeed = 5;
} else if (event.getX() < panelWidth/2) {
xspeed = -5;
}
synchronized (mElements) {
for (GraphicsElement element : mElements) {
element.changeSpeed(xspeed, yspeed);
}
}
}
return true;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (!mThread.isAlive()) {
mThread = new ViewThread(this);
mThread.setRunning(true);
mThread.start();
}
mElements.add(new GraphicsElement(getResources(), 80, 300));
numberOfElements += 1;
}
public void surfaceDestroyed(SurfaceHolder holder) {
我也有ViewThread,只是我的動畫線程,並GraphicsElement ,它定義了運動物體。我的動畫速度很慢(觸摸),我認爲這與我的.sleep()方法有關。任何人都可以幫我嗎?
編輯:我使用.sleep(),因爲我不想氾濫TouchEvents。 我想要得到它喜歡:檢查的TouchEvent,睡眠,檢查的TouchEvent,睡眠...等...
哦,初始化問題來自舊代碼。編輯我的問題來回答你的最後一個問題。 – usealbarazer 2011-06-14 16:32:34
so ...任何人? ... – usealbarazer 2011-06-14 17:02:16
做一些其他方式的防洪保護,也許只是偶爾調用p.onTouchEvent()。阻止用戶界面線程是一個非常糟糕的主意,只會讓你的應用看起來呆滯,並且可能會產生一些其他不良效果,例如降低幀速率。 – 2011-06-14 17:29:01