当我投掷图像视图时,我正在尝试运行一个非常简单的 2D 动画。我有 2 项活动参与其中。
游戏画布
@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;
}
还有游戏窗口
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 不是 Canvas obj。它是一个设置ContentView(R.layout.game_canvas) 的活动
GameWindow 是一个自定义的 ImageView