ListView滚动监听
GesturDetector手势监听、VelocityTracker滑动速度检测、OnTouchListener监听、OnScrollListener监听
OnScrollListener的两个回调方法
onScrollStateChanged()
方法,由参数scrollState决定回调次数,scrollState有三种模式。
onScrollListener.SCROLL_STATE_IDLE
滚动停止时。onScrollListener.SCROLL_STATE_TOUCH_SCROLL
正在滚动时。onScrollListener.SCROLL_STATE_FLING
手指抛动时,即手指用力滑动,离开后惯性继续滚动的的状态。
onScroll()
方法,显示当前ListView滚动的状态,三个参数。
firstVisibleItem
当前可见的第一个item的ID。visibleItemCount
当前可见的item总数。totalItemCount
item总数。
获取当前可是的Item的位置等信息
获取可见区域最后一个item的id
listview.getLastVisiblePosition()
获取可见区域第一个item的id
listview.getFirstVisiblePosition()
ListView常用拓展
弹性的ListView
- 重写ListView的方法
overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)
,并且设置maxOverScrollY的值,ListView就具有弹性。
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int
scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX,
50, isTouchEvent);
}
- 参数说明
/**
* Scroll the view with standard behavior for scrolling beyond the normal
* content boundaries. Views that call this method should override
* {@link #onOverScrolled(int, int, boolean, boolean)} to respond to the
* results of an over-scroll operation.
*
* Views can use this method to handle any touch or fling-based scrolling.
*
* @param deltaX Change in X in pixels
* @param deltaY Change in Y in pixels
* @param scrollX Current X scroll value in pixels before applying deltaX
* @param scrollY Current Y scroll value in pixels before applying deltaY
* @param scrollRangeX Maximum content scroll range along the X axis
* @param scrollRangeY Maximum content scroll range along the Y axis
* @param maxOverScrollX Number of pixels to overscroll by in either direction
* along the X axis.
* @param maxOverScrollY Number of pixels to overscroll by in either direction
* along the Y axis.
* @param isTouchEvent true if this scroll operation is the result of a touch event.
* @return true if scrolling was clamped to an over-scroll boundary along either
* axis, false otherwise.
*/