不需要监听滑动位置,只需要重写ScrollView的onOverScrolled和stopNestedScroll方法就可以了

public class ReadScrollView extends ScrollView{
private int mScrollY = 0;
private boolean mClampedY = false;
public ReadScrollView(Context context) {
super(context);
} public ReadScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
} public ReadScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} /**
* 监听变化---一般用不到
* @param scrollX
* @param scrollY
* @param clampedX
* @param clampedY
*/
// @Override
// protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// super.onScrollChanged(l, t, oldl, oldt);
// if (scrollChangedListener != null){
// scrollChangedListener.onScrollChanged(l,t,oldl,oldt);
// }
//// DebugUtil.d("l==" + l +" t==" + t +" oldl==" + oldl + " oldt=="+oldt);
// } @Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
//scrollY=位置0和最底y坐标;clampedY=是否到顶部或者底部
mScrollY = scrollY;
mClampedY = clampedY;
// DebugUtil.d("======l==onOverScrolled"+" scrollY="+scrollY+" clampedY="+clampedY );
} /**
* 刷新到顶部和底部
*/
@Override
public void stopNestedScroll() {
super.stopNestedScroll();
if (mClampedY){
        mClampedY = false;
if (mScrollY == 0){
scrollChangedListener.onScrollChangedTop();
}else {
scrollChangedListener.onScrollChangedBottom();
}
}
DebugUtil.d("======l==stopNestedScroll" );
} OnScrollChangedListener scrollChangedListener; public void setScrollChangedListener(OnScrollChangedListener scrollChangedListener) {
this.scrollChangedListener = scrollChangedListener;
} /**
*
*/
public interface OnScrollChangedListener{
//到达顶部
void onScrollChangedTop();
//到达底部
void onScrollChangedBottom();
//监听变化
// void onScrollChanged(int l,int t,int oldl,int oldt);
}
}

使用

scrollview.setScrollChangedListener(new ReadScrollView.OnScrollChangedListener() {
@Override
public void onScrollChangedTop() {
ShowUtils.toast("顶部");
} @Override
public void onScrollChangedBottom() {
ShowUtils.toast("底部");
}
});

最新文章

  1. 小结-stm32 驱动LED灯
  2. Java基础-重写System.out.println方法
  3. 关于C#中的new的用法
  4. OpenSSL命令---pkcs12
  5. leetcode 104 Maximum Depth of Binary Tree ----- java
  6. 归并排序 空间复杂度为O(1)的做法
  7. Meteor 之 数据的发布于订阅(Publish and subscribe )
  8. SqlServer中decimal(numeric )、float 和 real 数据类型的区别[转]
  9. unity3d 获取相机视口四个角的坐标
  10. Web工程软件升级之数据库升级(一)
  11. Storm-1.0.1+ZooKeeper-3.4.8+Netty-4.1.3 HA集群安装
  12. C# 部分关键字
  13. JavaScript原生Array常用方法
  14. 设计模式(1)单例模式(Singleton)
  15. Ubuntu16.04解决无法切换root权限的问题
  16. 好用的jquery.animateNumber.js数字动画插件
  17. 使用PageHepler分页
  18. React脚手架创建一个React应用以及项目目录结构详解
  19. JAVA修饰符、关键字和继承(一)
  20. linux下怎样用c语言调用shell命令

热门文章

  1. 写一个Spring Boot的Hello World
  2. 【STL基础】deque
  3. POJ:2976 Dropping tests(二分+最大化平均值)
  4. 批处理中setlocal enabledelayedexpansion的含义
  5. logback error 分开存日志
  6. 缓存算法及Redis、Memcached、Guava、Ehcache中的算法
  7. layer 弹出对话框 子父页面相互参数传递
  8. Java学习笔记day07_琐碎知识_水仙花数_ASCII码_冒泡排序_简单选择排序_折半查找
  9. my18_mysql中的几个超时时间
  10. element-ui表单验证(电话,邮箱)