Java OnTouchEvent每次刷卡都会执行另一个操作
我有以下代码:Java OnTouchEvent每次刷卡都会执行另一个操作,java,android,Java,Android,我有以下代码: @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: x1 = event.getX(); break; case MotionEvent.ACTION_UP: x2 = event.get
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x1 = event.getX();
break;
case MotionEvent.ACTION_UP:
x2 = event.getX();
float deltaX = x2 - x1;
if (Math.abs(deltaX) > MIN_DISTANCE) {
if (x2 > x1) {
//from right to left
} else {
// from left to right
}
}
break;
}
return super.onTouchEvent(event);
}
我想重新制作这段代码,这样当我第一次滑动它时,它会执行一些操作,当我第二次滑动它时,它会执行另一个操作,当我第三次滑动它时,它会执行另一个操作
能帮我什么忙吗?
感谢您的每一个回答您可以使用一个类变量来存储刷卡发生的次数,并相应地采取行动
private int swipeCounter = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x1 = event.getX();
break;
case MotionEvent.ACTION_UP:
x2 = event.getX();
float deltaX = x2 - x1;
boolean left = Math.abs(deltaX) > MIN_DISTANCE;
swipeCounter++;
switch(swipeCounter) {
case 1:
...
break;
case 2:
...
break;
}
break;
}
return super.onTouchEvent(event);
}
我不理会你的其他逻辑,但有几件事我建议你改变。首先,如果刷卡距离不大于
minu distance
,它将始终注册为右刷卡。你可能想改变这一点。此外,您可能希望在ACTION\u MOVE
事件中执行此检查,以便您的操作总是在用户滑动一定距离后发生,而不是在用户抬起手指时发生。(因此-在每次移动过程中计算增量,如果它大于minu DISTANCE
确定它是左还是右,并增加swipcounter
)首先你需要检查你是否在处理右击,这意味着你没有检查压力机的索引,你可以使用:{motionEvent.getX(pointerIndex)},第二,您需要检查用户是否先向一个方向滑动,然后再向另一个方向滑动,如果这有任何意义,第三,如果触摸事件被取消,您不检查会发生什么,并且要结束此评论,您真的要将触摸事件传递给家长吗
至于解决方案,使用getActionIndex,将x保存在arraylist或hashmap中,这样您就可以根据操作的索引轻松访问第一个x,这样您就可以处理屏幕支持的许多滑动,而且它将非常健壮,别忘了检查是否有操作被取消,因此,如果取消从阵列中删除x,我将使用hashmap,它可能会很昂贵,但会运行得最快。您的意思是每次滑动都是单独进行的吗?当你的手指触到手机时,滑动,抬起,然后开始第二次滑动?或者你的意思是第二次和第三次刷卡在第一次刷卡仍在进行时开始,即多点触控?是的,每次刷卡都需要从左向右刷卡,反之亦然?你能添加这个代码吗?