不需要监听滑动位置,只需要重写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("底部");
}
});

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. 【NOIP 2009】靶形数独

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

  2. 第一章:初识JAVA

    一:计算机语言发展史 机器语言:典型的二进制文件和计算机交流. 汇编语言: 通过大量的标识符表示一些基本操作来和计算机做交流. 高级语言:通过常见的英语指令来编写程序,完成沟通 常见高级语言 Java ...

  3. CF581D Three Logos 暴力

    Three companies decided to order a billboard with pictures of their logos. A billboard is a big squa ...

  4. 有趣的数 zoj 月赛

    题目描述 让我们来考虑1到N的正整数集合.让我们把集合中的元素按照字典序排列,例如当N=11时,其顺序应该为:1,10,11,2,3,4,5,6,7,8,9. 定义K在N个数中的位置为Q(N,K),例 ...

  5. CF959C Mahmoud and Ehab and the wrong algorithm 构造

    Mahmoud was trying to solve the vertex cover problem on trees. The problem statement is: Given an un ...

  6. django 异常问题总结

    1.问题1 在继承的类中: 403错误: views 添加:from django.core.context_processors import csrf def TestUEditor(reques ...

  7. 【笔记】如何在for语句中迭代多个可迭代对象

    并行=>使用内置函数zip,它能将多个可迭代对象合并,每次迭代返回一个元组. for i,j,k in zip(a,b,c): TODO 穿行=>使用标准库中的itertools.chai ...

  8. 解决SharePoint密码更新后,创建Web Application 失败

    问题在sharepoint central administration中通过Configuration Wizards来创建一个web application,出现如下错误: The passwor ...

  9. LeeCode(5. Longest Palindromic Substring)

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  10. SQLServer连接查询之Cross Apply和Outer Apply的区别及用法

    https://blog.csdn.net/wikey_zhang/article/details/77480118 先简单了解下cross apply的语法以及会产生什么样的结果集吧! 示例表: S ...