根据android MotionEvent
文档:在按下手势期间(ACTION_DOWN
和ACTION_UP
之间)发生了更改。动作包含最近的点,以及自上次向下或移动事件以来的任何中间点。
所以,当我在我的观点上应用setOnTouchListene
时,它完全有效,它会给我ACTION_DOWN
,ACTION_UP
和ACTION_MOVE
但我的问题是我只想在ACTION_DOWN
之前完全忽略ACTION_MOVE
个事件。因为ACTION_MOVE
事件仅在ACTION_DOWN
事件发生后才会发生。
我的编码:
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
Log.e("Mouse: ", "Click");
break;
case MotionEvent.ACTION_MOVE:
Log.e("Mouse: ", "Move");
break;
}
return false;
}
});
因此,有任何理由忽略ACTION_DOWN
事件。由于用户只想移动而不想点击,ACTION_MOVE
也会在自己执行之前ACTION_DOWN
出现。
...谢谢
答案 0 :(得分:5)
根据你的评论 - 你可以玩反击。例如:
private static int counter = 0;
...
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
Log.e("Mouse: ", "Click");
break;
case MotionEvent.ACTION_MOVE:
counter++; //check how long the button is pressed
if(counter>10){
Log.e("Mouse: ", "Move");
}
break;
case MotionEvent.ACTION_UP:
if(counter<10){
//this is just onClick, handle it(10 is example, try different numbers)
}else{
//it's a move
}
counter = 0;
break;
}
return false;
}
});