我在布局中使用HorizontalScrollView
,我需要识别用户是否已经到达滚动的起点和终点。
对于ListView
,我已经尝试了onScrollListener
,可以找到滚动的起点和终点。
我试着在我的Scrollview
中做同样的事情,但似乎不可能。有没有其他可能的方法来实现我所需要的。
发布于 2014-04-29 21:06:41
视图的每个实例都调用getViewTreeObserver()
。现在,当保存一个ViewTreeObserver
实例时,可以使用addOnScrollChangedListener()
方法向其添加一个OnScrollChangedListener()
。
您可以查看有关here类的更多信息。
它可以让你知道每一个滚动事件--但是没有坐标。不过,您可以通过在侦听器中使用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
}
});
发布于 2015-10-20 15:52:57
这可能非常有用。使用NestedScrollView
而不是ScrollView
。支持库23.1向NestedScrollView
引入了一个OnScrollChangeListener
。所以你可以做这样的事情。
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
}
});
发布于 2018-07-17 23:37:18
您可以使用NestedScrollView
而不是ScrollView
。然而,当使用Kotlin Lambda时,它不会知道你想要NestedScrollView的setOnScrollChangeListener
而不是View (这是API23级)的API。您可以通过将第一个参数指定为NestedScrollView来解决此问题。
nestedScrollView.setOnScrollChangeListener { _: NestedScrollView, scrollX: Int, scrollY: Int, _: Int, _: Int ->
Log.d("ScrollView", "Scrolled to $scrollX, $scrollY")
}
https://stackoverflow.com/questions/10713312
复制相似问题