Android: ScrollView监听滑动到顶端和底端
2014-07-10 17:41
232 查看
在项目中需要监听ScrollView滑动到顶端和底端的时候以实现自己的ScrollView,那么怎样去监听呢?今天查看了一下ScrollView的源码,找到了一种方法。先看一下源码中的overScrollBy()方法:
此方法有9个参数,参数太多有点让人模糊。这里我们不管他们是什么意思,直接看36-43行代码,很显然这是一个垂直方向的边界检查,而这也正是我们想要的。因此我们可以重写此方法,在此方法中实现监听,代码如下:
是不是很简单呢?
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { final int overScrollMode = mOverScrollMode; final boolean canScrollHorizontal = computeHorizontalScrollRange() > computeHorizontalScrollExtent(); final boolean canScrollVertical = computeVerticalScrollRange() > computeVerticalScrollExtent(); final boolean overScrollHorizontal = overScrollMode == OVER_SCROLL_ALWAYS || (overScrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && canScrollHorizontal); final boolean overScrollVertical = overScrollMode == OVER_SCROLL_ALWAYS || (overScrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && canScrollVertical); int newScrollX = scrollX + deltaX; if (!overScrollHorizontal) { maxOverScrollX = 0; } int newScrollY = scrollY + deltaY; if (!overScrollVertical) { maxOverScrollY = 0; } // Clamp values if at the limits and record final int left = -maxOverScrollX; final int right = maxOverScrollX + scrollRangeX; final int top = -maxOverScrollY; final int bottom = maxOverScrollY + scrollRangeY; boolean clampedX = false; if (newScrollX > right) { newScrollX = right; clampedX = true; } else if (newScrollX < left) { newScrollX = left; clampedX = true; } boolean clampedY = false; if (newScrollY > bottom) { newScrollY = bottom; clampedY = true; } else if (newScrollY < top) { newScrollY = top; clampedY = true; } onOverScrolled(newScrollX, newScrollY, clampedX, clampedY); return clampedX || clampedY; }
此方法有9个参数,参数太多有点让人模糊。这里我们不管他们是什么意思,直接看36-43行代码,很显然这是一个垂直方向的边界检查,而这也正是我们想要的。因此我们可以重写此方法,在此方法中实现监听,代码如下:
@Override protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { int newScrollY = scrollY + deltaY; final int bottom = maxOverScrollY + scrollRangeY; final int top = -maxOverScrollY; if (newScrollY > bottom) { System.out.println("滑动到底端"); } else if (newScrollY < top) { System.out.println("滑动到顶端"); } return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); }
是不是很简单呢?
相关文章推荐
- Android监听ScrollView滑动到顶端和底部
- Android监听ScrollView滑动到顶端和底部
- Android监听ScrollView滑动到顶端和底部
- Android 监听ScrollView的滑动
- Android 监听ScrollView的滑动
- Android 监听ScrollView的滑动
- Android中实现监听ScrollView滑动事件
- 【Android】Scrollview 顶端固定 or 滑动锚钉
- Android中监听ScrollView滑动停止和滑动到底部
- ScrollView滑动到最底端或者最顶端再加载数据
- android监听ScrollView滑动停止
- 【ScrollView】Android ScrollView监听滑动事件
- 监听ScrollView滑动到顶端和底部
- Android 监听ScrollView滑动距离简单处理
- ScrollView滑动到最底端或者最顶端再加载数据
- Android ScrollView滑动监听
- Android 监听ScrollView的滑动
- ScrollView滑动到最底端或者最顶端再加载数据
- 监听ScrollView滑动到顶端和底部
- binbinyang---android监听输入法弹起控制ScrollView滚到最顶端或最低端