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