android ScrollView滚动距离和判断滚动停止状态


今天很高兴,自己解决了判断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。

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

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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 ;
             }
 
 
         });

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM