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

  1. public class ReadScrollView extends ScrollView{
  2. private int mScrollY = 0;
  3. private boolean mClampedY = false;
  4. public ReadScrollView(Context context) {
  5. super(context);
  6. }
  7.  
  8. public ReadScrollView(Context context, AttributeSet attrs) {
  9. super(context, attrs);
  10. }
  11.  
  12. public ReadScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
  13. super(context, attrs, defStyleAttr);
  14. }
  15.  
  16. /**
  17. * 监听变化---一般用不到
  18. * @param scrollX
  19. * @param scrollY
  20. * @param clampedX
  21. * @param clampedY
  22. */
  23. // @Override
  24. // protected void onScrollChanged(int l, int t, int oldl, int oldt) {
  25. // super.onScrollChanged(l, t, oldl, oldt);
  26. // if (scrollChangedListener != null){
  27. // scrollChangedListener.onScrollChanged(l,t,oldl,oldt);
  28. // }
  29. //// DebugUtil.d("l==" + l +" t==" + t +" oldl==" + oldl + " oldt=="+oldt);
  30. // }
  31.  
  32. @Override
  33. protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
  34. super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
  35. //scrollY=位置0和最底y坐标;clampedY=是否到顶部或者底部
  36. mScrollY = scrollY;
  37. mClampedY = clampedY;
  38. // DebugUtil.d("======l==onOverScrolled"+" scrollY="+scrollY+" clampedY="+clampedY );
  39. }
  40.  
  41. /**
  42. * 刷新到顶部和底部
  43. */
  44. @Override
  45. public void stopNestedScroll() {
  46. super.stopNestedScroll();
  47. if (mClampedY){
            mClampedY = false;
  48. if (mScrollY == 0){
  49. scrollChangedListener.onScrollChangedTop();
  50. }else {
  51. scrollChangedListener.onScrollChangedBottom();
  52. }
  53. }
  54. DebugUtil.d("======l==stopNestedScroll" );
  55. }
  56.  
  57. OnScrollChangedListener scrollChangedListener;
  58.  
  59. public void setScrollChangedListener(OnScrollChangedListener scrollChangedListener) {
  60. this.scrollChangedListener = scrollChangedListener;
  61. }
  62.  
  63. /**
  64. *
  65. */
  66. public interface OnScrollChangedListener{
  67. //到达顶部
  68. void onScrollChangedTop();
  69. //到达底部
  70. void onScrollChangedBottom();
  71. //监听变化
  72. // void onScrollChanged(int l,int t,int oldl,int oldt);
  73. }
  74. }

使用

  1. scrollview.setScrollChangedListener(new ReadScrollView.OnScrollChangedListener() {
  2. @Override
  3. public void onScrollChangedTop() {
  4. ShowUtils.toast("顶部");
  5. }
  6.  
  7. @Override
  8. public void onScrollChangedBottom() {
  9. ShowUtils.toast("底部");
  10. }
  11. });

ScrollView监听滑动到顶部和底部的方法的更多相关文章

  1. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

  2. Android: ScrollView监听滑动到顶端和底端

    在项目中需要监听ScrollView滑动到顶端和底端的时候以实现自己的ScrollView,那么怎样去监听呢?今天查看了一下ScrollView的源码,找到了一种方法.先看一下源码中的overScro ...

  3. android去掉滑动到顶部和底部的阴影

    android去掉滑动到顶部和底部的阴影 <ListView android:id="@+id/listView" android:layout_width="ma ...

  4. js与jquery实时监听输入框值的oninput与onpropertychange方法

    文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时监 ...

  5. 关于scrollview监听的一些方法

    一 package cn.testscrollview; import android.os.Bundle; import android.view.MotionEvent; import andro ...

  6. 移动端控制视频点击播放点击下一个视频时自动停止播放&监听滑动溢出屏幕高度时停止播放

    直接上代码js部分: <script type="text/javascript"> var go;//记录video播放器位置 var video=document. ...

  7. Qt实现小功能之列表无限加载(创意很不错:监听滚动条事件,到底部的时候再new QListWidgetItem)

    概念介绍 无限加载与瀑布流的结合在Web前端开发中的效果非常新颖,对于网页内容具备较好的表现形式.无限加载并没有一次性将内容全部加载进来,而是通过监听滚动条事件来刷新内容的.当用户往下拖动滚动条或使用 ...

  8. Android 用Activity的onTouchEvent来监听滑动手势

    package com.example.activityOnTouchEvent; import android.app.Activity; import android.os.Bundle; imp ...

  9. 实时监听input输入内容的N种方法

    现在有一个需求,需要我们实时监听input输入框中的内容,从而带来更好的用户体验,而不是等我们全部输入完毕才告诉我们格式不对首先我们创建一个input输入框 <form name='loginF ...

随机推荐

  1. 查看详细linux系统信息的命令和方法

    查看内存大小: cat /proc/meminfo |grep MemTotaluname -a # 查看内核/操作系统/CPU信息的linux系统信息命令head -n 1 /etc/issue # ...

  2. 论文阅读笔记五十六:(ExtremeNet)Bottom-up Object Detection by Grouping Extreme and Center Points(CVPR2019)

    论文原址:https://arxiv.org/abs/1901.08043 github: https://github.com/xingyizhou/ExtremeNet 摘要 本文利用一个关键点检 ...

  3. Qt 学习之路 2(12):菜单栏、工具栏和状态栏

    Home / Qt 学习之路 2 / Qt 学习之路 2(12):菜单栏.工具栏和状态栏 Qt 学习之路 2(12):菜单栏.工具栏和状态栏  豆子  2012年9月10日  Qt 学习之路 2  2 ...

  4. HTML5拖拽——将本地文件拖拽到网页中显示

    HTML5标准中的提供的用于文件输入输出(I/O)的对象 File: 代表一个文件对象 FileList: 代表一个文件列表,类数组对象 FileReader 用于从文件中提取内容 FileWrite ...

  5. P1111 修复公路(并查集)

    题目背景 AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数NN,和公路数MM,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你 ...

  6. 杭电ACM hdu 1398 Square Coins

    Problem Description People in Silverland use square coins. Not only they have square shapes but also ...

  7. python基础之1--Python入门

    第1章 Python生态圈 第2章 编程与编程语言 python是一门编程语言,作为学习python的开始,需要事先搞明白:编程的目的是什么?什么是编程语言?什么是编程? 2.1 编程的目的: 计算机 ...

  8. Why Nexiq 125032 USB Link Truck diagnostic tool is so helpful ?

    As for as I am concerned , Heavy Duty Diagnostic Nexiq 125032 USB is a helpful tool , which has exce ...

  9. php数组·的方法3-数组指针

    /* * 数组指针函数 * */ //key() current() 指针一直停在第一位 不会下移 echo '<hr>'; $arr5 = array('name' => 'hxq ...

  10. hadoop 常用hdfs命令