解決思路:
中心思路:每過200毫秒判斷一次滾動的Y值是否發(fā)生變化
設(shè)立onKeyUp的監(jiān)聽,在手指離開屏幕后用 handler.sendMessageDelayed(handler.obtainMessage(1), 200)每隔200毫秒getScrollY()一次,然后比較getScrollY()的值直到與上次得到的相等時就是scrollview停止滑動了。
辦法:
在 ScrollView的 setOnTouchListener 監(jiān)聽中 onKeyUp的監(jiān)聽
當(dāng) 手指 抬起的時候 MotionEvent.ACTION_UP 通過handler 發(fā)送一個 延遲消息 判斷 當(dāng)前滾動Y的位置,是否和之前的一致。如果一致,那么說明 ScrollView滾動完成 不一致 說明 正在滾動 那么 handleMessage 內(nèi)部 再發(fā)送一次消息
當(dāng) ScrollView滾動 完成之后 處理 相應(yīng)的邏輯
case MotionEvent.ACTION_UP:
mHandler.sendEmptyMessageDelayed(0, 10);
break;
// 用于 存儲 上一次 滾動的Y坐標(biāo)
private int lastY=-1;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
// 打印 每次 Y坐標(biāo) 滾動的距離
// LogUtils.e(scrollView.getScrollY() + "");
// 獲取到 滾動的 Y 坐標(biāo)距離
int scrollY = scrollView.getScrollY();
// 如果 滾動 的Y 坐標(biāo) 的 最后一次 滾動到的Y坐標(biāo) 一致說明 滾動已經(jīng)完成
if (scrollY == lastY) {
// ScrollView滾動完成 處理相應(yīng)的事件
} else {
// 滾動的距離 和 之前的不相等 那么 再發(fā)送消息 判斷一次
// 將滾動的 Y 坐標(biāo)距離 賦值給 lastY
lastY = scrollY;
mHandler.sendEmptyMessageDelayed(0, 10);
}
}
}
};