我必須在我的程序中使用手勢檢測器。一個美麗的作品,另一個沒有。據我所知,他們都以同樣的方式實施。Android:手勢檢測器不會捕獲手勢
下面是執行不工作的一個代碼:
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;
}
});
然後,我有這個模塊以後,它定義excuseGestureDetector
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」。任何想法爲什麼它不會登記投擲?
這裏有兩件事:視圖中的「onTouch()」處理程序,如果它已消耗觸摸事件應該返回。儘管如此,GestureDetector可能需要多個事件。因此,您不應該像現在一樣返回myExcuseGestureDetector.onTouchEvent(event),但是您應該將每個事件都提供給GestureDetector,並返回true以指示您已使用該觸摸。這很可能是現在工作,因爲你是GestureDetector總是返回true。 – botteaap 2011-01-30 14:15:51
@LoneWolfPR我正在使用它像這樣.......但它不工作....請看看...... \t http://pastebin.com/n9JPGrCn – 2015-12-31 07:24:33
它不起作用'Dialog'。你在'Dialog'上測試過嗎? – zeeali 2017-03-06 11:48:34