我有这段代码:
@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);
}
我想重新制作这段代码,以便当我第一次滑动时,在我第二次滑动时进行一些动作再做一次动作,当我第三次滑动时再做一次动作......
对我有什么帮助吗? 谢谢你的每一个答案
答案 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,它可能很昂贵,但工作速度最快。