-
今天很高興,自己解決了判斷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。
廢話不多說,代碼如下。希望對你有所幫助。
1234567891011121314151617181920212223242526272829303132333435363738394041vBookDetail.setOnTouchListener(newOnTouchListener() {privateintlastY =0;privateinttouchEventId = -9983761;Handler handler =newHandler() {@OverridepublicvoidhandleMessage(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();}}}};@OverridepublicbooleanonTouch(View v, MotionEvent event) {isScoll =false;inteventAction = event.getAction();inty = (int) event.getRawY();switch(eventAction) {caseMotionEvent.ACTION_UP:handler.sendMessageDelayed(handler.obtainMessage(touchEventId, v),5);break;default:break;}returnfalse;}});
