2014-10-01 65 views
-1

有人可以帮助我的Android手机应用程序中的ScrolView。我的问题 - 在我的垂直ScrollView我有水平“hlistview»,当我移动”hlistview“上/下/右/左只玩之一。他们怎么能一起工作吗?在时间,工作只有一个。不工作ScrollView和Horizo​​ntalListView

hListView.setOnTouchListener(new HorizontalListView.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      int action = event.getAction(); 
      switch (action) { 
      case MotionEvent.ACTION_DOWN: 
       v.getParent().requestDisallowInterceptTouchEvent(true); 
       break; 
      case MotionEvent.ACTION_UP: 
       v.getParent().requestDisallowInterceptTouchEvent(false); 
       break; 
      } 
      v.onTouchEvent(event); 
      return true; 
     } 
    }); 
+0

如果您按所需方向滚动,则只应禁止父视图。你需要保存最后的Y或X并设置一个threashold。如果你到达了这个threashold,这意味着你正在滚动horizo​​ntaly/verticaly,并且可以安全地禁止父母 – 2014-10-01 13:45:17

+0

你不应该在一个布局中使用ScrollView和ListView。 ListView负责它自己的滚动。我猜Horizo​​ntalListView扩展了一个listView,或? – Opiatefuchs 2014-10-01 13:46:03

回答

1

嵌套scrollviews必须拦截触摸事件。但是,如果你只是requestDisallowInterceptTouchEvent上ACTION_DOWN你都使得它的父禁用触摸事件的时刻你的手指触摸屏幕,这不是想要的行为,你需要设置一个阈值,并且只有当你的滚动距离已经达到该阈值时,才允许这些事件。

在嵌套滚动视图ACTION_DOWN设置这样的字段保存的初始X(对于水平滑动):

mLastX = event.getX(); 

下一页上ACTION_MOVE与阈值(50中的该实施例中)进行比较

if (Math.abs(event.getX() - mLastX) > 50) 
      requestDisallowInterceptTouchEvent(true); 
相关问题