我可以为 ScrollView 使用 onScrollListener 吗?

新手上路,请多包涵

我在布局中使用 HorizontalScrollView ,我需要确定用户已经到达滚动的起点和终点。

对于 ListView 我已经尝试了 onScrollListener 并且可以找到滚动的起点和终点。

我试图在我的 Scrollview 中做同样的事情,但似乎不可能。有没有其他可能的方法来实现我的需要。

原文由 arnp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 671
2 个回答

View 的每个实例调用 getViewTreeObserver() 。现在,当持有 ViewTreeObserver 的实例时,您可以使用方法 addOnScrollChangedListener() 添加一个 OnScrollChangedListener() 到它。

您可以 在此处 查看有关此类的更多信息。

它让您知道每个滚动事件 - 但没有坐标。您可以通过在侦听器中使用 getScrollY()getScrollX() 来获取它们。

 scrollView.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() {
    @Override
    public void onScrollChanged() {
        int scrollY = rootScrollView.getScrollY(); // For ScrollView
        int scrollX = rootScrollView.getScrollX(); // For HorizontalScrollView
        // DO SOMETHING WITH THE SCROLL COORDINATES
    }
});

原文由 Zbun 发布,翻译遵循 CC BY-SA 3.0 许可协议

这可能非常有用。使用 NestedScrollView 而不是 ScrollView 。支持库 23.1 引入了 OnScrollChangeListenerNestedScrollView 。所以你可以做这样的事情。

  myScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
        @Override
        public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
            Log.d("ScrollView","scrollX_"+scrollX+"_scrollY_"+scrollY+"_oldScrollX_"+oldScrollX+"_oldScrollY_"+oldScrollY);
            //Do something
        }
    });

原文由 Midhun Vijayakumar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题