(四十九)android解决同一个界面上ScrollView和 ListView等可滚动控件滚动冲突问题

如下代码所示:

其中 scrollView 为外层的大的scrollView 控件。

lv为嵌在ScrollView中的可触摸的listView控件

  1. //       重写onTouch()事件,在事件里通过requestDisallowInterceptTouchEvent(boolean)方法来设置父类的可用性,true表示父类的滚动不可用, false表示父类可以滚动 
  2.  //解决listView的touch事件和scrollView的touch事件冲突问题  

lv.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub boolean result = false; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = event.getX(); lastY = event.getY(); break; case MotionEvent.ACTION_MOVE: int distanceX = (int) Math.abs(event.getX() - lastX); int distanceY = (int) Math.abs(event.getY() - lastY); if (distanceX > distanceY && distanceX > 10) { sorollView.requestDisallowInterceptTouchEvent(true); } break; case MotionEvent.ACTION_UP: sorollView.requestDisallowInterceptTouchEvent(false); break; default: break; } return result; } });