我試圖運行一個非常簡單的2D動畫,當我扔圖像視圖。我有2個活動涉及這個。onFling()2D動畫問題
的的GameCanvas
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY)
{
if(GameWindow.getContext() == null)
return false;
if((e1.getY() >= GameWindow.getHeight()) && (e1.getY() <= GameWindow.getBottom()))
{
try
{
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left slap
if((e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE) && (Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY))
{
slappingLeft = true;
//Animate Slap
GameWindow.update();
if(!running)
running = true;
}
else if ((e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE) && (Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY))
{
slappingRight = true;
//Animate Slap
GameWindow.update();
if(!running)
running = true;
}
}
catch (Exception e)
{
//nothing
}
}
slappingLeft = slappingRight = running = false;
return true;
}
而且GameWindow
private RefreshHandler mRedrawHandler = new RefreshHandler();
class RefreshHandler extends Handler
{
@Override
public void handleMessage(Message msg) {
GameWindow.this.update();
GameWindow.this.invalidate();
}
public void sleep(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
};
public void update()
{
//animate slap
if(GameCanvas.slappingLeft)
{
for(int i = 0; i < 500; i+=100)
{
GameCanvas.SlapLeft();
mRedrawHandler.sleep(100);
}
GameCanvas.SetImage();
//this.invalidate();
}
else if(GameCanvas.slappingRight)
{
for(int i = 0; i < 500; i+=100)
{
GameCanvas.SlapImage();
mRedrawHandler.sleep(100);
}
GameCanvas.SetImage();
//this.invalidate();
}
}
我將不勝感激,如果有人可以幫助我弄清楚這個問題了。我已經嘗試了許多不同的方法解決這個問題。
我只想顯示SlapImage半秒鐘,然後恢復到正常圖像,直到onFling再次被調用。
如果您想了解SetImage(),SlapLeft()和SetImage(),請告訴我!
非常感謝!
編輯
的GameCanvas不是畫布OBJ。它是setsContentView(R.layout.game_canvas)
GameWindow是一個自定義的ImageView
你確定update()被調用嗎?睡覺似乎也沒有做任何事情。你可以看看http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html好像你正在重新發明輪子在這裏。 – schwiz 2012-02-05 21:53:15
是的,正在調用更新。從sdk文件夾中的示例Snake遊戲中,它指出「創建一個我們可以用來引發動畫的簡單處理程序。我們將自己設置爲目標,並且可以使用sleep()函數來導致更新/無效在晚些時候發生。「我試圖這樣做。 – myselfesteem 2012-02-05 22:11:01
但你已經註釋掉了sendMessagesDelayed(),所以它實際上並沒有做任何事情。 – schwiz 2012-02-06 03:30:09