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