2012-10-10 38 views
0

我開發自定義列表應用程序。我是凌駕觸摸事件的名單。 列表滾動很好,如果我滾動一次(觸摸和或移動手指上下一次)。當我上下滾動列表而不離開列表時(即觸摸向上移動然後離開),在這種情況下列表不能正確滾動。由於action_move只需要第一次滾動,即當我將列表向下移動時,action_move未被檢測到。 如果有人試圖這樣做,請讓我知道。 任何代碼片段都會有很大的幫助。Android的檢測繼續上下滾動

謝謝

回答

2

我做了這樣的事情。你也可以試試。它的工作不錯

public boolean onTouchEvent(MotionEvent ev) { 
    final int action = ev.getAction(); 
    if ((action == MotionEvent.ACTION_MOVE) && (mTouchState != TOUCH_STATE_REST)) { 
     Log.d("DB", " scrolling twice "); 
     scrolltwice = true; 
     return true; 
    } 

    final float x = ev.getX(); 
    final float y = ev.getY(); 
    switch(action & MotionEvent.ACTION_MASK){ 

    case MotionEvent.ACTION_MOVE: 

     final int xDiff = (int) Math.abs(x - mLastMotionX); 
     yDiff = (int) (y - mLastMotionY); 
     final int ydif = (int) Math.abs(y - mLastMotionY); 

     final int touchSlop = mTouchSlop; 
     boolean xMoved = xDiff > touchSlop; 
     boolean yMoved = ydif > touchSlop; 
     if (xMoved || yMoved) { 
      if (yMoved) {     
       mTouchState = TOUCH_STATE_SCROLLING; 
      } 
     } 
     break; 

    case MotionEvent.ACTION_DOWN: 

     if (!mScroller.isFinished()) { 
      mScroller.abortAnimation(); 
     } 
     // Remember location of down touch 
     mLastMotionX = x; 
     mLastMotionY = y;   
     break; 
    case MotionEvent.ACTION_CANCEL: 
    case MotionEvent.ACTION_UP: 

     final int myDiff = (int) (y - mLastMotionY); 

     if(mTouchState == TOUCH_STATE_SCROLLING){ 
      scrolltwice = false; 
      if(!scrolltwice){ 
      Log.d("DB", " ACTION_UP fetch new records "); 
       FetchRecords rec = new FetchRecords(); 
       rec.execute(); 
       if(yDiff < 0){ // fetching next slot of records 
        nextRecordId = nextRecordId + previousTotal; 
        if(nextRecordId > totalRowCount){ 
         nextRecordId = nextRecordId - previousTotal; 
        } 
       }else if(yDiff > 0){ // fetching previous slot of records 
        nextRecordId = nextRecordId - previousTotal; 
        if(nextRecordId < 1){ 
         nextRecordId = 0; 
        } 
       } 
      } 
     } 
     scrolltwice = false; 
     mTouchState = TOUCH_STATE_REST; 
     break; 
    } 
    return false; 

} 

     //implement ontouch listener if the view is list pass it onTouchEvent 
public boolean onTouch(View v, MotionEvent event) { 
    if(v.equals(objListView)) 
     onTouchEvent(event); 
    return false; 
}