我现在整夜都在盯着这个。我正在尝试为 Android 制作一个简单的交互式球类游戏,但我似乎无法让 onFling 方法正常工作。我在 onFling 中的日志没有出现在 LogCat 中,并且对投掷手势没有响应。我认为我在使用手势检测器或手势监听器时做错了。请帮帮我,这样我终于可以睡觉了:)。这是我的代码:
这在 onCreate 之外,但仍在 Activity 中:
@Override
public boolean onTouchEvent(MotionEvent me) {
return gestureDetector.onTouchEvent(me);
}
SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
ballSpeed.x = velocityX;
ballSpeed.y = velocityY;
Log.d("TAG", "----> velocityX: " + velocityX);
Log.d("TAG", "----> velocityY: " + velocityY);
return true;
}
};
GestureDetector gestureDetector = new GestureDetector(null,
simpleOnGestureListener);
编辑:
显然上面的代码确实有效。这意味着错误在其他地方。@bobnoble 说我应该发布我的 onCreate() 方法:
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE); // hide title bar
getWindow().setFlags(0xFFFFFFFF,LayoutParams.FLAG_FULLSCREEN| LayoutParams.FLAG_KEEP_SCREEN_ON);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// create pointer to main screen
final FrameLayout mainView = (android.widget.FrameLayout) findViewById(R.id.main_view);
// get screen dimensions
Display display = getWindowManager().getDefaultDisplay();
try {
display.getSize(size);
screenWidth = size.x;
screenHeight = size.y;
} catch (NoSuchMethodError e) {
screenWidth = display.getWidth();
screenHeight = display.getHeight();
}
ballPosition = new android.graphics.PointF();
ballSpeed = new android.graphics.PointF();
// create variables for ball position and speed
ballPosition.x = 4 * screenWidth / 5;
ballPosition.y = 2 * screenHeight / 3;
ballSpeed.x = 0;
ballSpeed.y = 0;
// create initial ball
ballView = new BallView(this, ballPosition.x, ballPosition.y, 20);
mainView.addView(ballView); // add ball to main screen
ballView.invalidate(); // call onDraw in BallView
//listener for touch event
mainView.setOnTouchListener(new android.view.View.OnTouchListener() {
public boolean onTouch(android.view.View v, android.view.MotionEvent e) {
//set ball position based on screen touch
ballPosition.x = e.getX();
ballPosition.y = e.getY();
ballSpeed.y = 0;
ballSpeed.x = 0;
//timer event will redraw ball
return true;
}});
}