今天很高興,本身解決了判斷ScrollView滾動中止的監聽,如今分享給你們。html
由於ScrollView沒有像listView中的setOnScrollListener()監聽,固然也就沒有SCROLL_STATE_IDLE等。java
解決的問題:ide
公司項目須要在一個列表中,相似listView,由於業務要求,這個列表是用拼湊的方法,拼湊出來的,因此外層包裹一層ScrollView。spa
如今公司要求,滑動到最後一條的時候,加載下一部分數據。若是使用scrollView.getScrollY()得到的是你手滑動的距離,當你鬆開手以後,界面會繼續滑動,這個方法是獲取不到新的Y值,因此,咱們能夠添加監聽,時刻監視着ScrollView的變化。code
須要先給ScrollView添加TouchListener ,在MotionEVENT.Up中,發送延遲的handler,這樣就能夠起到監聽的做用。而且記錄當前的高度lastYhtm
在handler中,若是高度lastY和scrollView.getScrollY()是相等的,則表示,ScrollView已經中止,這時再根據你的要求判斷中止以後的業務。這時的scrollView.getScrollY()就是控件滾動的距離。若是不相等,證實孩子啊滑動中,繼續發handler繼續記錄lastY。ci
廢話很少說,代碼以下。但願對你有所幫助。get
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
;
}
});
|