今天很高兴,自己解决了判断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() {@Overridepublic 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();}}}};@Overridepublic boolean onTouch(View v, MotionEvent event) {isScoll = false;int eventAction = event.getAction();switch (eventAction) {case MotionEvent.ACTION_UP:handler.sendMessageDelayed(handler.obtainMessage(touchEventId, v), 5);break;default:break;}return false;}});


更多相关文章

  1. Android(安卓)MediaPlayer 常用方法介绍
  2. SlidingMenu和ActionBarSherlock结合做出出色的App布局,Facebook
  3. Android解决父控件拦截子控件手势滑动事件的问题
  4. TabHost页卡
  5. 调出软键盘 挤掉标题栏咋办
  6. Android(安卓)MediaPlayer 常用方法介绍
  7. Android电量和插拔电源状态广播监听
  8. Android(安卓)SDK自带教程之BluetoothChat
  9. android中传感器的学习

随机推荐

  1. android的EventBus模式 解决各种handler,a
  2. android动态生成表格,使用的是TABLELAYOUT
  3. 编译最小的Android x86 image
  4. 一个hello程序的android内核模块编译方法
  5. Android中用GridView实现九宫格
  6. 浅析android中的Bundle类
  7. Android碎片化机制
  8. 在ubuntu下搭建Android的开发环境
  9. 技术/源码/开源网站
  10. Android培训班(18)