編輯:關於Android編程
今天很高興,自己解決了判斷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() { @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; } });
最近工作中,遇到了幾個內存優化的問題,1.應用退出後,此應用進程保持了不少內存得不到釋放,用工具強制gc也無法釋放。2.應用進入某些頁面瞬間請求分配內存過大。此兩個問題對
內存洩露,是Android開發者最頭疼的事。可能一處小小的內存洩露,都可能是毀於千裡之堤的蟻穴。 怎麼才能檢測內存洩露呢?網上教程非常多,不過很多都是使用Eclipse
前言:在Android開發中,對於圖片的加載可以說是個老生常談的問題了,圖片加載是一個比較坑的地方,處理不好,會有各種奇怪的問題,比如 加載導致界面卡頓,程序crash。
談到android事件處理,最復雜的就是對Touch事件的處理,因為Touch事件包括:down, move, up, cancle和多點觸摸等多種情況,多點觸摸的情況先