近期发布公司项目发了一个版本,有一个页面是采用ScrollerView
实现的,需要监听是否滚动到底部的事件。通常我们是重写ScrollerView 自己监听滚动事件的,刚开始的监听事件代码如下,实际测试也没问题。
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
if (scrollY == 0) {
isScrolledToTop = clampedY;
isScrolledToBottom = false;
} else{
isScrolledToTop = false;
isScrolledToBottom = clampedY;
}
notifyScrollChangedListeners();
}
然后这个版本上线之前,突然有人反映锤子手机滚动到底部没有上拉加载效果了,What Fuck!
然后我找了一个锤子手机试了一下,打印了一下onOverScrolled()
方法中的 clampedY
值发现一直为 false
,日志如下
既然这样的判断方式行不通,那就换种方式,反正条条大路通罗马
通用的处理方式,适配锤子手机
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
//由于锤子系列手机监听 clampedY 会一直为flase 所以采用以下方式判断是否滚动至底部
int measuredHeight = getChildAt(0).getMeasuredHeight();
if (scrollY == 0) {
isScrolledToTop = true;
isScrolledToBottom = false;
} else if (scrollY + getHeight() == measuredHeight) {
isScrolledToTop = false;
isScrolledToBottom = true;
}
notifyScrollChangedListeners();
}
网友评论