展会信息港展会大全

android ScrollView滚动距离和判断滚动停止状态
来源:互联网   发布日期:2015-10-03 10:53:49   浏览:2082次  

导读:今天很高兴,自己解决了判断ScrollView滚动停止的监听,现在分享给大家。因为ScrollView没有像listView中的setOnScrollListener()监听,当然也就没有S...

今天很高兴,自己解决了判断ScrollView滚动停止的监听,现在分享给大家。

因为ScrollView没有像listView中的setOnScrollListener()监听,当然也就没有SCROLL_STATE_IDLE等。

解决的问题:

公司项目需要在一个列表中,类似listView,因为业务要求,这个列表是用拼凑的方法,拼凑出来的,所以外层包裹一层ScrollView。

现在公司要求,滑动到最后一条的时候,加载下一部分数据。如果使用scrollView.getScrollY()获得的是你手滑动的距离,当你松开手之后,界面会继续滑动,这个方法是获取不到新的Y值,所以,我们可以添加监听,时刻监视着ScrollView的变化。

需要先给ScrollView添加TouchListener ,在MotionEVENT.Up中,发送延迟的handler,这样就可以起到监听的作用。并且记录当前的高度lastY

在handler中,如果高度lastY和scrollView.getScrollY()是相等的,则表示,ScrollView已经停止,这时再根据你的要求判断停止之后的业务。这时的scrollView.getScrollY()就是控件滚动的距离。如果不相等,证明孩子啊滑动中,继续发handler继续记录lastY。

废话不多说,代码如下。希望对你有所帮助。

vBookDetail.setOnTouchListener(new OnTouchListener() {

private int lastY = 0;

private int touchEventId = -9983761;

Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

View scroller = (View) msg.obj;

if (msg.what == touchEventId) {

if (lastY == scroller.getScrollY()) {

//停止了,此处你的操作业务

} else {

handler.sendMessageDelayed(handler.obtainMessage(touchEventId, scroller), 1);

lastY = scroller.getScrollY();

}

}

}

};

@Override

public boolean onTouch(View v, MotionEvent event) {

isScoll = false;

int eventAction = event.getAction();

int y = (int) event.getRawY();

switch (eventAction) {

case MotionEvent.ACTION_UP:

handler.sendMessageDelayed(handler.obtainMessage(touchEventId, v), 5);

break;

default:

break;

}

return false;

}

});

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港