我有这个应用程序实现了一个ViewPager和一个包含6个页面的TabStrip。其中一个页面包含2个ListView。如果我水平滑动(无论我的手指在哪里,无论是在外面还是在ListViews上,我都应该可以在页面上滑动。但是如果我在任一ListView上垂直滑动,则滚动应限于特定的ListView只滚动列表中的项目。我当前的代码不起作用。水平滑动将我带到ViewPager中的下一个寻呼机,但是没有捕获列表视图中的垂直滚动。请看一看。任何帮助都会很棒。感谢。
屏幕截图的链接位于:https://plus.google.com/112121882360943840035/posts/LL2SBB3qPtf
ScrollView svParent = (ScrollView) rootView.findViewById(R.id.home_scrollview);
ListView lvSchedules = (ListView) rootView.findViewById(R.id.home_schedules_list);
lvSchedules.setAdapter(mSchedulesAdapter);
svParent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
rootView.findViewById(R.id.home_schedules_list).getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
});
lvSchedules.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float downXValue = 0;
float downYValue = 0;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
downXValue = event.getX();
downYValue = event.getY();
}
else if (event.getAction() == MotionEvent.ACTION_UP) {
float currentX = event.getX();
float currentY = event.getY();
// check if horizontal or vertical movement was bigger
if (Math.abs(downXValue - currentX) > Math.abs(downYValue - currentY)) {
// going backwards: pushing stuff to the right
if (downXValue < currentX) {
v.getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
// going forwards: pushing stuff to the left
if (downXValue > currentX) {
v.getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
}
else {
if (downYValue < currentY) {
v.getParent().requestDisallowInterceptTouchEvent(true);
return true;
}
if (downYValue > currentY) {
v.getParent().requestDisallowInterceptTouchEvent(true);
return true;
}
}
}
return false;
}
});
---编辑---
重新构思我的问题...... 我有一个在ViewPager中有6页的应用程序。第一个页面,即主屏幕,有一个ScrollView作为父级,其中有2个ListView。使用现在修改过的代码,我可以在页面内以及&#34;时间表&#34;内部滚动。 ListView(它包含4个项目,其中1个项目在可视区域之外,因此需要在List中滚动)。
现在已经实现了列表内的垂直滚动和scrollview父级,我希望允许用户水平滑动&#34;在ListViews上并使ViewPager遍历到下一页,我不能这样做。我希望我现在有意义。这是编辑过的代码......
ScrollView svParent = (ScrollView) rootView.findViewById(R.id.home_scrollview);
ListView lvSchedules = (ListView) rootView.findViewById(R.id.home_schedules_list);
ListView lvInbox = (ListView) rootView.findViewById(R.id.home_inbox_list);
svParent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
rootView.findViewById(R.id.home_schedules_list).getParent().requestDisallowInterceptTouchEvent(false);
rootView.findViewById(R.id.home_inbox_list).getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
});
lvSchedules.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
lvInbox.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});