我的问题是,当我试图在我的 ListView 中拖动一个项目时,我并不总是得到 ACTION_DOWN 事件。我收到了很多 ACTION_MOVE 事件,只有一个 ACTION_UP 事件。 情况并非总是如此。我得到 ACTION_DOWN 3 次。这让我很困惑。
我看过类似的问题,但它的答案似乎不适合我。谁能想到为什么会这样?
谢谢
//list_client -- a listview
list_client.setOnTouchListener(new View.OnTouchListener() {
float f1 = -1, f2 = -1 ;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
f1 = event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
f2 = event.getRawY();
if(f2 - f1 > 50){
if(View.VISIBLE != rl_search_and_add.getVisbility() && ){ rl_search_and_add.setVisibility(View.VISIBLE);
}
f1 = f2;
}else if (f2 - f1 < -50){
rl_search_and_add.setVisibility(View.GONE);
f1 = f2;
}
break;
case MotionEvent.ACTION_UP:
f1 = -1; f2 = -1;
break;
}
return false;
}
});
最佳答案
这种行为可能有多种原因。
- 用户可能错过了列表,
MotionEvent.ACTION_DOWN
已由其他组件处理,但无论用户如何继续拖动并点击您的 ListView 区域,您都会收到MotionEvent.ACTION_MOVE
Action 。 - 另一种可能性是,你有很多事件,它们被移到了历史事件中,而你只收到了最新的事件。您可以使用MotionEvent的所有历史方法去看他们。
关于Android ListView onTouchEvent 并不总是给出 ACTION_DOWN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965291/