我有GridViewPager有2行3列。作为其默认行为如果您在任何页面上向下滑动,它将导航到下一行的第一页。但我想覆盖该行为并停止在第一行第二和第三列上向下滑动。
我尝试将2行一列GridViewPager放入第一个单元格并使用1行3列GridViewPager,并在第一个单元格中放置另一个第1列第2行GridViewPager。两者都有类似的滚动问题.Bellow代码是我用来改变滚动行为的自定义GridViewPager。
GridViewPager应该只能滑动如下图所示。Swipe Example Image
public class GridViewPagerCustom extends GridViewPager {
private GestureDetector mGestureDetector;
private int px = 0;
private int py = 0;
public int getPy() {
return py;
}
public void setPy(int py) {
this.py = py;
}
public int getPx() {
return selectedPage;
}
public void setPx(int px) {
this.px = px;
}
public GridViewPagerCustom(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new YScrollDetector());
setFadingEdgeLength(0);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
// Return false if we're scrolling in the x direction
class YScrollDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return (getPx() == 0 && getPy() == 0) ? Math.abs(distanceY) > Math.abs(distanceX) : false;
}
}
}
答案 0 :(得分:0)
您应该可以通过覆盖canScrollVertically(int direction)
来控制它;我没试过,但听起来像是正确的地方。也就是说,请注意改变这种行为,因为它会与使用此组件的其他应用程序不同,并且假设没有其他行等等,应用程序的用户可能会感到困惑。