为什么我不能让 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()
方法也无济于事。
我做错了什么?
最佳答案
对于某些硬件,很难检测到显示屏边缘的触摸,因此 Android 应该为您设置适当的标志。这并不总是发生,所以你不应该依赖正确设置的边缘标志。 一种选择是使用实际屏幕像素高度和宽度以及从 MotionEvent 返回的 x,y 坐标。参见 How to detect touch within a portion of the screen .
关于android - getEdgeFlags 总是返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167006/