我有一个2至4页的viewpager。这些页面之一以表格形式显示数据。为此,我使用垂直滚动和水平滚动。
由于horizontalscrollview和viewpager之间的冲突,有时滚动不起作用。
当页面向左滚动时,我想滚动页面。当它到达边缘时,按照http://developer.android.com/design/patterns/swipe-views.html中的指南,另一种滑动手势将使其改变视图分页器的页面,其中指出:“如果视图包含超出屏幕宽度的内容(例如宽电子邮件),请确保用户的初始滑动会在视图中水平滚动。一旦到达内容的结尾,则应再次滑动至下一个视图。支持在内容水平滚动时使用边缘滑动立即在视图之间导航。”
我怎样才能做到这一点?
最后,我制作了一个自定义寻呼机,并覆盖了canScroll方法,如下所示
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if (v instanceof HorizontalScrollView) {
HorizontalScrollView scroll = (HorizontalScrollView) v;
int vScrollX = scroll.getScrollX();
TableLayout table = (TableLayout) scroll.getChildAt(scroll
.getChildCount() - 1);
int diff = (table.getRight() - (scroll.getWidth()
+ scroll.getScrollX() + table.getLeft()));
if (vScrollX == 0 && diff <= 0) {// table without scroll
if (dx > 20 && this.getCurrentItem() > 0) {
this.setCurrentItem(this.getCurrentItem() - 1, true);
} else if (dx < -20
&& this.getCurrentItem() + 1 < this.getChildCount()) {
this.setCurrentItem(this.getCurrentItem() + 1, true);
}
return false; // change page
}
if (vScrollX == 0 && dx > 20) {// left edge, swiping right
if (this.getCurrentItem() > 0) {
this.setCurrentItem(this.getCurrentItem() - 1, true);
}
return false; // change page
}
if (vScrollX == 0 && dx < -20) {// left edge, swiping left
return true;// scroll
}
if (diff <= 0 && dx > 20) {// right edge, swiping right
return true;// scroll
}
if (diff <= 0 && dx < -20) {// right edge, swiping left
if (this.getCurrentItem() + 1 < this.getChildCount()) {
this.setCurrentItem(this.getCurrentItem() + 1, true);
}
return false;// change page
}
}
return super.canScroll(v, checkV, dx, x, y);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句