2013-02-26 102 views
1

我正在构建一个应用程序,允许用户使用水平滑动浏览不同的屏幕,但是这些屏幕也包含垂直滚动视图。看起来,如果垂直滚动不是100%垂直(希望有意义),android会将垂直滚动检测为水平滑动。Android Developemnt:降低水平滑动灵敏度或关闭垂直滑动

无论如何禁用垂直扫描,或降低水平检测的灵敏度?

onFling类中的代码目前非常基本,像这样。

public boolean onFling(MotionEvent start, MotionEvent finish, float velocityX, 
       float velocityY) { 
    //Right Swipe 
    if (finish.getRawX() < start.getRawX()) { 
     Toast.makeText(getApplicationContext(), "Showing Listings For : "+date.getDate(),Toast.LENGTH_SHORT).show(); 
     } 

    if (start.getRawX() < finish.getRawX()) { 
     Toast.makeText(getApplicationContext(), "Showing Listings For : "+date.getDate(),Toast.LENGTH_SHORT).show(); 
     } 
    } 

- 更新 -

嗯,我结束了计算bewtween轻扫,这给了我一个东西,用它来确定如何刷卡是垂直的起点和终点的垂直差异。它非常基本,但似乎工作正常。

更新的代码现在看起来像。

public boolean onFling(MotionEvent start, MotionEvent finish, float velocityX, 
       float velocityY) { 
    //Right Swipe 

    //Caluclate the vertical difference 
    float verticalChange = start.getRawY() - finish.getRawY(); 

    if ((finish.getRawX() < start.getRawX()) && (verticalChange > -40 && verticalChange < 40)) { 
     Toast.makeText(getApplicationContext(), "Showing Listings For : "+date.getDate(),Toast.LENGTH_SHORT).show(); 
     } 

    if (start.getRawX() < finish.getRawX()) && (verticalChange > -40 && verticalChange < 40)) { 
     Toast.makeText(getApplicationContext(), "Showing Listings For : "+date.getDate(),Toast.LENGTH_SHORT).show(); 
     } 
    } 

回答

0

您可以扩展自己的垂直滚动视图,不会触发事件进行水平滑动。当然,那么你必须在不是滚动视图的部分上滑动。

- 额外评论---您是否在各种手机/设备上测试过该功能?你可能会发现自己有不同的结果。

+0

理想情况下,我希望整个屏幕可以滑动,但只能在水平面上滑动。不,我目前只在仿真器上进行过测试。 – cosmicsafari 2013-02-26 13:41:29

+0

如果可能的话,我会建议在实际的电话上尝试它(可以借用朋友吗?),并看看你是否有相同的结果。 模拟器已经走了很长的一段路,但是如果你有一台较慢的电脑,它的结果可能会相当不可思议/尴尬,我发现。 – Zerkz 2013-02-26 13:54:37