创建您自己的 ViewPager 子类并覆盖 canScroll 如下。
class MyViewPager extends ViewPager {
...
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if (isInsideSlideShow(x,y)) {
return true; // allow the slide show its own scrolling
} else {
return false; // ViewPager scrolls
}
}
您当然需要知道幻灯片放映覆盖了屏幕的哪一部分。这个知识必须在方法isInsideSlideShow中实现。
如果您无法掌握幻灯片放映的 x/y 坐标,则另一种解决方案可能是使用从视图的最边界开始的手势作为分页手势,而在内部区域开始更多的手势作为幻灯片放映手势。
我将这种方法用于显示地图和图形的视图寻呼机。两者都支持自己的平移。但是当用户在左边界或右边界开始手势时,整个地图或图形会滑开:
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
int width = getWidth();
int slideWidth = Math.round(width * 0.15f);
if (x < slideWidth || x > width - slideWidth) {
return false;
}
return true;
}