ScrollView快速滑動或拖拽停止事件監(jiān)聽

解決思路:
中心思路:每過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);
                }
            }
        }
    };
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容