我必须在我的程序中使用 GestureDetectors。一个工作得很好,另一个没有。据我所知,它们都是以相同的方式实现的。
这是实现不起作用的代码:
myExcuseGestureDetector = new GestureDetector(new excuseGestureDetector());
excuseView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if(myExcuseGestureDetector.onTouchEvent(event)){
Log.d("Excuse Gesture Return","true");
return true;
}
Log.d("Excuse Gesture Return","false");
return false;
}
});
然后我有这个块,它定义了借口GestureDetector
private class excuseGestureDetector extends SimpleOnGestureListener{
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.d("MotionEvent","onFling");
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if(currExcuseNumber<currExcuseSet.size()){
currExcuseNumber++;
loadNextExcuse(currExcuseNumber,1);
excuseView.setInAnimation(slideLeftExcuseIn);
excuseView.setOutAnimation(slideLeftExcuseOut);
excuseView.showNext();
return true;
}
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if(currExcuseNumber > 1){
loadNextExcuse(currExcuseNumber,0);
excuseView.setInAnimation(slideRightExcuseIn);
excuseView.setOutAnimation(slideRightExcuseOut);
excuseView.showPrevious();
return true;
}
}
} catch (Exception e) {
// nothing
}
return false;
}
}
无论出于何种原因,它根本不会注册投掷。无论动画是否发生,程序都应该打印出我试图跟踪的 Log.d("MotionEvent","onFling") ,但它没有。我所知道的是它确实记录了某种触摸事件的发生,因为它确实从我显示的第一个块中找出了“Excuse Gesture Return”“false”。关于为什么它不会注册投掷的任何想法?