2011-08-04 105 views
0

嗨,大家好我做一個Android項目來實現刷卡功能。 如何做到這一點。刷卡android系統

我與onfling方法嘗試,但它不爲我工作..任何人有正確的解決方案請回復這個帖子。

我onfling代碼

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    if (mGesturesEnabled) { 
     try { 
      if (e2.getY() - e1.getY() > StudyOptions.sSwipeMinDistance && Math.abs(velocityY) > StudyOptions.sSwipeThresholdVelocity && Math.abs(e1.getX() - e2.getX()) < StudyOptions.sSwipeMaxOffPath && !mIsYScrolling) { 
       // down 
       executeCommand(mGestureSwipeDown); 
      } else if (e1.getY() - e2.getY() > StudyOptions.sSwipeMinDistance && Math.abs(velocityY) > StudyOptions.sSwipeThresholdVelocity && Math.abs(e1.getX() - e2.getX()) < StudyOptions.sSwipeMaxOffPath && !mIsYScrolling) { 
       // up 
       executeCommand(mGestureSwipeUp); 
      } else if (e2.getX() - e1.getX() > StudyOptions.sSwipeMinDistance && Math.abs(velocityX) > StudyOptions.sSwipeThresholdVelocity && Math.abs(e1.getY() - e2.getY()) < StudyOptions.sSwipeMaxOffPath && !mIsXScrolling && !mIsSelecting) { 
       // right 
       executeCommand(mGestureSwipeRight); 
      } else if (e1.getX() - e2.getX() > StudyOptions.sSwipeMinDistance && Math.abs(velocityX) > StudyOptions.sSwipeThresholdVelocity && Math.abs(e1.getY() - e2.getY()) < StudyOptions.sSwipeMaxOffPath && !mIsXScrolling && !mIsSelecting) { 
       // left 
       executeCommand(mGestureSwipeLeft); 
      } 

      mIsXScrolling = false; 
      mIsYScrolling = false; 
     } catch (Exception e) { 
      Log.e(AnkiDroidApp.TAG, "onFling Exception = " + e.getMessage()); 
     } 
    } 
    return false; 
} 
+0

請使用格式按鈕下一次格式化你的代碼。我已經爲你編寫了它,但它仍然需要對縮進進行一些調整。此外,添加你的意思是「它不工作」。這是什麼呢,你能指望它做的(爲什麼),那麼你的日誌說,等多一點的努力會更容易回答這個 – Nanne

回答

5

確定。從另一個話題轉貼:

這裏的simpliest工作的護圈,我能想到的版本。 你可以將它綁定到任何組件,而不僅僅是ImageView。

public class MyActivity extends Activity {

private void onCreate() { 
    final ImageView imageView = (ImageView) findViewById(R.id.image_view); 
    imageView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(final View view, final MotionEvent event) { 
      gdt.onTouchEvent(event); 
      return true; 
     } 
    }); 
} 

private final GestureDetector gdt = new GestureDetector(new GestureListener()); 

private static final int SWIPE_MIN_DISTANCE = 120; 
private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
private class GestureListener extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; // Right to left 
     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; // Left to right 
     } 
     if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; // Bottom to top 
     } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; // Top to bottom 
     } 
     return false; 
    } 
} 

}

它不僅捕獲的水平,而且也垂直(只需刪除垂直部分,如果你不需要它),並揮筆水平有優先權,你可以看到。 在地方,方法返回(NAD在我的意見是)只需要調用你的方法或任何:)

1

如果使用觸摸輸入,你應該回到true表明它不通過它

也請確保您有setOnTouchListener,否則將無法使用您的ontouchlistener