免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Android中怎么利用scrollview監聽滑動狀態-創新互聯

這期內容當中小編將會給大家帶來有關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監聽滑動狀態了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創新互聯行業資訊頻道。

文章題目:Android中怎么利用scrollview監聽滑動狀態-創新互聯
文章位置:http://m.newbst.com/article30/diogpo.html

成都網站建設公司_創新互聯,為您提供手機網站建設、外貿建站、微信小程序、建站公司、網站設計公司、做網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站建設網站維護公司