Java 如何使左右滑动手势更自由?
我有这个密码。它起作用了。我可以左右滑动,得到想要的结果。但是,问题是我必须几乎严格地水平滑动,才能使滑动操作正常工作。我想在刷卡时有更多的自由。我希望当我沿对角线方向滑动时,滑动也能起作用。我应该如何更改此代码 这是密码Java 如何使左右滑动手势更自由?,java,android,swipe,ontouchlistener,Java,Android,Swipe,Ontouchlistener,我有这个密码。它起作用了。我可以左右滑动,得到想要的结果。但是,问题是我必须几乎严格地水平滑动,才能使滑动操作正常工作。我想在刷卡时有更多的自由。我希望当我沿对角线方向滑动时,滑动也能起作用。我应该如何更改此代码 这是密码 import android.content.Context; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener;
import android.content.Context;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class OnSwipeTouchListener implements OnTouchListener {
Context context = null;
private final GestureDetector gestureDetector = new GestureDetector(context, new GestureListener());
public boolean onTouch(final View view, final MotionEvent motionEvent) {
return gestureDetector.onTouchEvent(motionEvent);
}
private final class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY) - 50) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
}
} else {
if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeBottom();
} else {
onSwipeTop();
}
}
}
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
}
if(Math.abs(diffX)>Math.abs(diffY)-50)
条件确定是水平还是垂直滑动。您可以做的第一件事是将50
密度乘以DisplayMetrics.density
如果这不能产生你要寻找的结果,请考虑用三角法来确定起点和终点之间的夹角。考虑从<代码> E1 < /代码>到<代码> E2 < /代码>的向量,并找到它与<代码> x < /代码>轴之间的夹角。它应该是
arccos(diffX/sqrt(diffX*diffX+diffY*diffY))
(如何使它在所有4个象限中工作留给读者作为练习)
通过将该角度与特定的角度范围进行比较(例如,右击为-45到45),可以获得更直观、更可定制的结果
请注意,这只考虑方向,而不考虑速度