作產品時,有一個需求,須要監聽ScrollView滑動到最底部。在網上找了些方法,都有這樣或那樣的問題,要不就是監聽不精確,ide
要不就是重複監聽,那些代碼沒有產品化,很不可靠。測試
通過本身試驗,終於找到了個可以精確監聽的實現方法。代碼以下:優化
1 public class ScrollBottomScrollView extends ScrollView { 2 3 private OnScrollBottomListener _listener; 4 private int _calCount; 5 6 public interface OnScrollBottomListener { 7 void srollToBottom(); 8 } 9 10 public void registerOnScrollViewScrollToBottom(OnScrollBottomListener l) { 11 _listener = l; 12 } 13 14 public void unRegisterOnScrollViewScrollToBottom() { 15 _listener = null; 16 } 17 18 public ScrollBottomScrollView(Context context, AttributeSet attrs) { 19 super(context, attrs); 20 } 21 22 @Override 23 protected void onScrollChanged(int l, int t, int oldl, int oldt) { 24 View view = this.getChildAt(0); 25 if (this.getHeight() + this.getScrollY() == view.getHeight()) { 26 _calCount++; 27 if (_calCount == 1) { 28 if (_listener != null) { 29 _listener.srollToBottom(); 30 } 31 } 32 } else { 33 _calCount = 0; 34 } 35 } 36 }
用到這段代碼的產品也測試上線了,沒有Bug。this
Android SDK 中相似於這樣的不完美數不勝數,好比onTouch事件的傳遞,onMeasure方法的調用,都是很不精確,spa
須要本身再優化的,沒辦法,無力吐槽。code