getEdgeFlags始终返回0?

4
为什么我的getEdgeFlags()无法检测到边缘触摸?这与it技术有关。我扩展了DrawerLayout,然后进行了如下操作:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
    int edgeFlags = ev.getEdgeFlags();
    Log.d(TAG,String.valueOf(edgeFlags));

    if ((MotionEvent.EDGE_LEFT&edgeFlags)!=0 || (MotionEvent.EDGE_RIGHT&edgeFlags)!=0)
        Log.d(TAG,"BEZEL intercept.");
    else
        Log.d(TAG,"Regular intercept.");
    return super.onInterceptTouchEvent(ev);
}

我从未获得任何边缘检测,edgeFlags 总是0。

在G2上测试了4.4.2,S3上测试了4.3.1并在模拟的S4上测试了4.2.2。我知道只有ACTION_DOWN触碰才能进行边缘检测,但我从未检测到过。尽管如此,抽屉布局显然仍能够检测到它,因为通过边缘划动可以很好地打开抽屉。使用子类化ViewPager也会得到同样(缺乏)的结果。重写 onTouchEvent() 方法也没有帮助。

我做错了什么?


请查看此链接:https://groups.google.com/forum/m/#!topic/android-developers/pV20xJsSJI0 - pskink
1
并不是很有帮助(此外,请注意该论坛帖子已经超过4年了)。 “边缘”被定义为屏幕宽度的1/10或16dp(以较小者为准)。我可以在模拟器上离边缘如此接近地进行触摸,但仍然无法检测到边缘。 - jpop
再次阅读Dianne的答案,这也可能有所帮助 http://code.google.com/p/android/issues/detail?id=13931 - pskink
1
在发布这里之前,我已经找到并阅读了那篇文章,但它并没有帮助我解决问题。它提到数字化器无法检测到靠近边缘的触摸,但这不是我的问题(我可以在模拟器上点击第一个像素)。此外,这似乎只是一个存在于4.0以下设备上的错误。我已经在4.2、4.3和4.4的安卓设备上进行了测试。 - jpop
1
它明确指出,边缘标志仅针对一些历史悠久的设备设置,这些设备的触摸屏在靠近边缘处触摸时存在准确事件检测问题。 - pskink
显示剩余2条评论
1个回答

0

对于某些硬件来说,在显示屏边缘检测到触摸操作太困难了,因此Android应该为你设置适当的标志。但并非总是如此,所以你不应该依赖于正确设置边缘标志。

一个选择是使用实际屏幕像素高度和宽度以及从MotionEvent返回的x,y坐标。请参见如何检测屏幕部分内的触摸操作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接