Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OnTouchEvent每次刷卡都会执行另一个操作_Java_Android - Fatal编程技术网

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,它可能会很昂贵,但会运行得最快。

您的意思是每次滑动都是单独进行的吗?当你的手指触到手机时,滑动,抬起,然后开始第二次滑动?或者你的意思是第二次和第三次刷卡在第一次刷卡仍在进行时开始,即多点触控?是的,每次刷卡都需要从左向右刷卡,反之亦然?你能添加这个代码吗?