OnTouchEvent每次刷一下另一个动作

时间:2015-05-06 18:07:35

标签: 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.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);
}

我想重新制作这段代码,以便当我第一次滑动时,在我第二次滑动时进行一些动作再做一次动作,当我第三次滑动时再做一次动作......

对我有什么帮助吗? 谢谢你的每一个答案

2 个答案:

答案 0 :(得分:0)

您可以使用类变量来存储滑动发生的次数,并采取相应的行动。

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);
}

我独自留下了你的另一个逻辑,但我建议改变一些事情。首先,如果滑动距离不大于MIN_DISTANCE,它将始终注册为右滑动。你可能想要改变它。此外,您可能希望在ACTION_MOVE事件中执行此检查,以便您的操作始终在用户滑动一定距离后发生,而不是在他们抬起手指时发生。 (因此 - 计算每次移动时的增量,如果它大于MIN_DISTANCE,则确定它是向左还是向右并增加swipeCounter。)

答案 1 :(得分:0)

首先你需要检查你正在处理正确的滑动,这意味着你没有检查压力机的索引,你可以使用:{motionEvent.getX(pointerIndex)},第二,你需要检查如果用户向一个方向滑动然后向另一个方向滑动,如果它意味着什么,第三个你不检查如果触摸事件被取消会发生什么,并且结束这个评论你真的想通过触摸事件给父母?

至于解决方案,使用getActionIndex,将ar保存在arraylist或hashmap中,这样你就可以根据动作的索引轻松访问第一个x,这样你可以处理许多滑动屏幕可以支持,并且它会非常健壮,不要忘记检查action_canceled,所以如果它取消了从数组中删除x,我会使用hashmap,它可能很昂贵,但工作速度最快。