ScrollView监听滑动到顶部和底部的方法
不需要监听滑动位置,只需要重写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("底部");
}
});
本文来自博客园,作者:西瓜皮不甜,转载请注明原文链接:https://www.cnblogs.com/Jieth/p/9192611.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!