91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么利用scrollview監聽滑動狀態

發布時間:2021-08-13 14:12:52 來源:億速云 閱讀:141 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關Android中怎么利用scrollview監聽滑動狀態,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

ScrollView

視圖的滾動過程,其實是在不斷修改原點坐標。當手指觸摸后,ScrollView會暫時攔截觸摸事件,使用一個計時器。假如在計時器到點后沒有發生手指移動事件,那么ScrollView發送tracking events到被點擊的subView;若是在計時器到點后發生了移動事件,那么ScrollView取消tracking自己促發滾動。

首先說一下NestedScrollView 的滑動事件的監聽,

如果使用

nestedScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {      @Override      public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {      }    });

這個方法在 API >= 23 時才可以使用,怎么解決呢 。我們可以自己定義一個ScrollView

public class MyScrollView extends NestedScrollView {   private OnScrollChanged mOnScrollChanged;  public MyScrollView(Context context) {    this(context, null);  }  public MyScrollView(Context context, AttributeSet attributeSet) {    this(context, attributeSet, 0);  }  public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);  }  @Override  protected void onScrollChanged(int l, int t, int oldl, int oldt) {    super.onScrollChanged(l, t, oldl, oldt);    if (mOnScrollChanged != null) {      mOnScrollChanged.onScroll(l, t, oldl, oldt);    }  }  public void setOnScrollChanged(OnScrollChanged onScrollChanged) {    this.mOnScrollChanged = onScrollChanged;  }  public interface OnScrollChanged {    void onScroll(int l, int t, int oldl, int oldt);  }}

這樣我們就可以通過實現 onScrollChanged() 監聽滑動事件了 ,其中可以監測到滑動距離,這樣就可以做好多事情了;

但是現在有一個需求就是【滑動的時候隱藏 一個靠邊的懸浮框,不滑動是懸浮框顯示出來】,這樣的話就需要監測滑動狀態了。scrollview 不像recyclerview一樣可以監測滑動狀態。

以下是我的一個實現方案,通過CountDownTimer 來實現

在剛才的onScrollChanged 接口中增加方法

public interface OnScrollChanged {    void onScroll(int l, int t, int oldl, int oldt);    void onTouch(boolean isDown);  }

然后重寫onTouchEvent方法

@Override  public boolean onTouchEvent(MotionEvent ev) {      switch (ev.getAction()) {      case MotionEvent.ACTION_UP:      case MotionEvent.ACTION_CANCEL:        if (mOnScrollChanged != null) {          mOnScrollChanged.onTouch(false);        }        break;      case MotionEvent.ACTION_DOWN:      case MotionEvent.ACTION_MOVE:        if (mOnScrollChanged != null) {          mOnScrollChanged.onTouch(true);        }        break;    }    return super.onTouchEvent(ev);  }

這里的isDown=true代表是按下或者滑動的狀態,對應ACTION_DOWN和ACTION_MOVE,fale代表ACTION_UP和ACTION_CANCEL

下面使用這個自定義的scrollerview

//靜止狀態private final static int SCROLL_STATE_IDLE = 1;//拖動或者慣性滑動狀態private final static int SCROLL_STATE_SCROLL = 2;//判斷是否是拖動狀態boolean isDragState = false;int currentState = SCROLL_STATE_IDLE;//這里采用100ms來判斷是否已經是靜止狀態,100ms結束后證明是靜止狀態private CountDownTimer scrollCountTimer = new CountDownTimer(100, 1) {    @Override    public void onTick(long millisUntilFinished) {    }    @Override    public void onFinish() {      setScrollState(SCROLL_STATE_IDLE);    }};private void initScrollView() {    scrollView.setOnScrollChanged(new MyScrollView.OnScrollChanged() {      @Override      public void onScroll(int l, int t, int oldl, int oldt) {        if (isDragState) {//拖動狀態單獨處理不再進行滾動狀態監測          return;        }        //滑動時先取消倒計時,設置滑動狀態        scrollCountTimer.cancel();        if(currentState != SCROLL_STATE_SCROLL) {          setScrollState(SCROLL_STATE_SCROLL);        }        scrollCountTimer.start();      }      @Override      public void onTouch(boolean isDown) {        isDragState = isDown;        //我這里把按下的狀態默認為了滾動的狀態,當然你也可以分開定義        if (isDown) {          scrollCountTimer.cancel();          setScrollState(SCROLL_STATE_SCROLL);        } else {          scrollCountTimer.start();        }      }});//最后記得頁面銷毀時,cancel掉timer

上述就是小編為大家分享的Android中怎么利用scrollview監聽滑動狀態了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仙游县| 都安| 砚山县| 保德县| 司法| 襄垣县| 平乐县| 赤壁市| 清流县| 陇川县| 平遥县| 仙桃市| 丹巴县| 通州区| 曲周县| 祁门县| 社旗县| 云南省| 玉溪市| 临潭县| 蒙自县| 特克斯县| 湾仔区| 容城县| 新沂市| 石台县| 怀安县| 海晏县| 肥城市| 四平市| 榆社县| 天门市| 新巴尔虎左旗| 剑川县| 咸宁市| 博野县| 临湘市| 晋州市| 巫山县| 伊宁市| 弋阳县|