如何判断一个NestedScrollView是否滚动到最后并且处于空闲状态?

2023-11-29

尝试过:

NestedScrollView ns =(NestedScrollView) findViewById(R.id.nested_scroll);
        ns.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
            @Override
            public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            }
        });

但卡住了,有人有想法吗?

只是为了弄清楚我想要什么 - 我希望能够观察滚动状态(如 RecyclerView 的 addOnScrollListener 中),并且仅在滚动结束(空闲)时检查一次,如果用户滚动到 NestedScrollView 的末尾。


很遗憾,NestedScrollView不支持调度滚动状态的实现,因为它是完全不同类型的滚动视图。简单来说就是FrameLayout with Scroller.

通常,当达到滚动视图的末尾时ViewCompat.canScrollVertically (scrollView, -1)返回假。对于滚动状态,您需要子类化NestedScrollView并添加您自己的界面,类似于RecyclerView。您的接口方法应该在以下重写方法中调用:

stopNestedScroll() -> SCROLL_STATE_IDLE

startNestedScroll() -> SCROLL_STATE_DRAGGING

dispatchNestedPreFling() -> SCROLL_STATE_FLINGING

请不要忘记对这些方法进行超级调用。如果你不这样做,你将会破坏 NestedScrollView 的行为

Edit:

public class NestedScrollingView extends NestedScrollView {
    private int mState = RecyclerView.SCROLL_STATE_IDLE;

    public interface NestedScrollViewScrollStateListener {
        void onNestedScrollViewStateChanged(int state);
    }


    public void setScrollListener(NestedScrollViewScrollStateListener scrollListener) {
        this.mScrollListener = scrollListener;
    }

    private NestedScrollViewScrollStateListener mScrollListener;

    public NestedScrollingView(Context context) {
        super(context);
    }

    public NestedScrollingView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NestedScrollingView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void stopNestedScroll() {
        super.stopNestedScroll();
        dispatchScrollState(RecyclerView.SCROLL_STATE_IDLE);
    }

    @Override
    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
        dispatchScrollState(RecyclerView.SCROLL_STATE_DRAGGING);
        return super.onStartNestedScroll(child, target, nestedScrollAxes);
    }


    @Override
    public boolean startNestedScroll(int axes) {
        boolean superScroll = super.startNestedScroll(axes);
        dispatchScrollState(RecyclerView.SCROLL_STATE_DRAGGING);
        return superScroll;
    }


    private void dispatchScrollState(int state) {
        if (mScrollListener != null && mState != state) {
            mScrollListener.onNestedScrollViewStateChanged(state);
            mState = state;
        }
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何判断一个NestedScrollView是否滚动到最后并且处于空闲状态? 的相关文章

随机推荐

  • 简单的 ImageView 颜色动画

    您好 我对 Android 比较陌生 如果可能的话 我希望获得一些关于在哪里搜索以解决我的问题的指南或建议 显然 我不具备发布图像的声誉 因此我会尽力解释它 假设我有一个空瓶子 一旦调用这个片段 活动 我想引入一个动画 它将逐渐垂直地 从下
  • 从列表中获取 min() 和 max() 的有效方法? [复制]

    这个问题在这里已经有答案了 我的问题来自发布到的答案如何在python 3中找到任意列表中缺失的数字 大多数解决方案建议使用类似的东西 a 10 12 13 8 get set of full numbers allNums set x f
  • HTML5 中样式元素的“scoped”属性当前状态如何?

    这里说明了http www w3 org TR html markup style html style 允许的父元素 任何可以包含元数据元素 div noscript 的元素 节 文章 旁白 that
  • 来自用户空间的 int 指令

    我的印象是 x86 上的 int 指令没有特权 所以 我认为我们应该能够从用户空间应用程序执行这条指令 但似乎并非如此 我正在尝试从 Windows 上的用户应用程序执行 int 我知道这样做可能不对 但我想找点乐子 但 Windows 正
  • 使用 java 进行 Flyway 迁移

    我学习了使用java进行flywaydb迁移 可以使用JDBC连接 还可以通过SpringTemplate进行spring支持 但是flyway不能与DAO一起使用 对于具有更多关系的表 实体 使用 DAO 而不是 sql 进行迁移要容易得
  • 如何使MySQL表的某一列不可见

    我正在 ID 列上运行查询 但我不希望它在我的框架 窗格中可见 我怎样才能实现这个目标 我应该再创建一个表吗 sql mysql 中有一个可以隐藏列的函数吗 我尝试用谷歌搜索 但还没有找到任何东西 这是代码 public void tabl
  • 带有延迟加载的自定义列表

    I have successfully implemented like this for lazy loading in custom list 我为此使用的代码在这里 黑莓中带有图像的自定义列表在链接的问题中 我定位了心形图标的 y 坐
  • 从 ggplot2 中删除顶部和右侧边框[重复]

    这个问题在这里已经有答案了 是否可以从 ggplot2 图表中删除顶部和右侧边框 即 我想保留 x 轴和 y 轴 但删除图形周围的其余黑框 M 看到这个线程 它专门处理这里的问题 http groups google com group g
  • plot.window(...) 中的 R 错误需要有限的“xlim”值

    我想绘制一个 data frame 我的问题是出现以下错误 Error in plot window need finite xlim values In addition Warning messages 1 In xy coords x
  • 在 chrome://settings 和类似的 url 上运行用户脚本

    为什么 tampermonkey 对以下网址不起作用chrome history or chrome settings 有什么方法可以在此页面上运行用户脚本吗 不幸的是 这是不可能的 因为chrome方案 chrome 不支持 match的
  • 即使执行 IF 语句的 Else 语句也是 TRUE

    我有一个问题Python标题中描述的语言 for slovo in slova if pygame mouse get pressed 0 and slovo rect collidepoint pygame mouse get pos f
  • XCode Bots API 配置编辑失败

    我想通过 XCode Bots API 更改机器人的方案名称 像这样的请求 curl XPATCH H Content Type application json H x xcsclientversion 8 https localhost
  • 在部署时无需 Regsrv32 即可将 TLB 转换为托管 .NET 程序集

    我有一个作为第三方 API 的一部分提供的 TLB 我使用 TLBIMP exe 生成 DLL 程序集包装器 然而 在开发时 该程序集似乎需要使用 regsvr32 注册才能使用 然而 这在开发时不是问题 我在生产中使用托管实例 并且在部署
  • 两个指定顶点之间的最短两条不相交路径

    给定一个加权无向图G和两个顶点a b 我们想要找到两条路径一个 gt 乙 and b gt a使得它们不共享任何边 并且两条路径中边的权重之和最小 最多可以有1 000顶点 直到10 000 edges 我最初尝试提出一种动态编程方法 但找
  • 计算两个变量之间的天数(一个是设定变量,另一个是事实变量)

    我一直在疯狂地寻找解决方案 但到目前为止我还没有成功 计算库存变量和 Ansible 事实之间的天数 当我手动设置这两个变量时 我没有问题 两者都被识别为日期 我可以从那里开始工作 如下所示 这是预期的输出 在 2 个手动设置的变量之间工作
  • 了解 scrapy 重命名图像的工作原理

    我看到所有问题here 但我还不明白 实际上 使用下面的代码我做了我需要的事情 除了重命名图像 所以我尝试更改名称items py文件 请检查里面的注释 设置 py SPIDER MODULES xxx spiders NEWSPIDER
  • 检测iOS8可达性手势

    有什么方法可以检测到新的可达性Objective C 中的 iOS8 手势 双击 iPhone 6 和 iPhone 6 Plus 上的 Touch ID 按钮即可激活该手势 没有针对它的公共 API 有两个相关的私有 API 方法UIAp
  • 是否有 css 属性的默认值列表? (所以我可以在js中为它们创建一个排除数组)

    所有列出 CSS 属性的网站 例如 MDN 或 w3schools 都会在单独的页面上列出每个 CSS 属性 当我迭代时CSSStyleDeclaration我得到一堆数据 其中 90 都是默认值 现在 除了转到每个页面并查看然后创建排除数
  • 为什么第一个值发生变化而第二个值没有变化?

    a 1 2 b a a append 3 print b shows 1 2 3 which means b changed c 4 d c c 8 print d shows 4 which means d did not change
  • 如何判断一个NestedScrollView是否滚动到最后并且处于空闲状态?

    尝试过 NestedScrollView ns NestedScrollView findViewById R id nested scroll ns setOnScrollChangeListener new NestedScrollVi