getEdgeFlags总是返回0?

时间:2014-03-04 08:52:00

标签: android

为什么我不能让getEdgeFlags()检测到边缘触摸?

我延长了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.

使用4.4.2测试G2,使用4.3.1测试S3,使用4.2.2测试S4。我知道只有ACTION_DOWN触摸得到边缘检测,但我没有得到任何检测到。尽管如此,抽屉布局显然设法检测到它,因为它打开抽屉边缘滑动就好了。我也通过子类ViewPager获得了相同(缺乏)的结果。覆盖onTouchEvent()方法也无济于事。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

对于某些硬件,很难检测到显示屏边缘的触摸,因此Android应该为您设置适当的标志。这并非总是会发生,因此您不应依赖于正确设置的边缘标志。 一种选择是使用实际屏幕像素的高度和宽度以及从MotionEvent返回的x,y坐标。参见How to detect touch within a portion of the screen