Android 水平投掷仅在偏移量0时开始
我正在努力实现fling。问题是,只有当X位于偏移量0(这意味着在屏幕边缘)时,我才能得到它。当我试着在屏幕中间飞舞时,什么也没有发生。这只发生在X上。Y的行为正常。 代码如下:Android 水平投掷仅在偏移量0时开始,android,gestures,onfling,Android,Gestures,Onfling,我正在努力实现fling。问题是,只有当X位于偏移量0(这意味着在屏幕边缘)时,我才能得到它。当我试着在屏幕中间飞舞时,什么也没有发生。这只发生在X上。Y的行为正常。 代码如下: public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { if ((e1.getY() < CARD_POSITION) &&a
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if ((e1.getY() < CARD_POSITION) && (e2.getY() < CARD_POSITION)
&& (Math.abs(e1.getX() - e2.getX()) >SWIPE_MIN_DISTANCE )
) {
Log.v("Fling:",Double.toString(e1.getX()));
return true;
} else {
return false;
}
} catch (Exception e) {
return false;
}
}
public boolean onFling(运动事件e1、运动事件e2、浮点速度X、,
浮动速度y){
试一试{
if((e1.getY()滑动距离)
) {
Log.v(“Fling:”,Double.toString(e1.getX());
返回true;
}否则{
返回false;
}
}捕获(例外e){
返回false;
}
}
我过去也遇到过类似的问题。结果是,在我如何将x位置与我使用的最小距离阈值进行比较的数学计算中出现了错误。根据您所描述的内容以及所发布的代码,听起来似乎x方向抛投不起作用,因为在应用绝对值后,x1和x2之间的差异并没有达到您的想法
从0偏移量开始,在整个屏幕上滑动,您可以注册一个fing,因为距离这么远,两个值之间的差异足以触发阈值。但是从屏幕中间看,比如x1=400和x2=where移动事件被注册,您并没有触发该阈值
对我有效的是去除绝对值
public boolean onFling(MovtionEvent e1, MotionEvent e2, float velocityX, float velocityY){
if(e2.getX() - e1.getX() > MIN_SWIPE_DISTANCE && Math.abs(velocityX)){
Log.d("Swipe", "Left to right")
return true;
} else if (e2.getX() - e1.getX() > MIN_SWIPE_DISTANCE && Math.abs(velocityX)){
Log.d("Swipe", "Right to Left")
return true;
}
我的推理基于描述e1和e2所代表内容的文档:
e1开始滚动的第一个向下运动事件。e2 触发当前启动的移动运动事件 该错误被证明是一种假设,即相对于e2的
动作
发生了e1初始动作