国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android ListView監聽滑動事件的方法(詳解)

2019-12-12 03:23:34
字體:
來源:轉載
供稿:網友

ListView的主要有兩種滑動事件監聽方法,OnTouchListener和OnScrollListener

1、OnTouchListener

OnTouchListener方法來自View中的監聽事件,可以在監聽三個Action事件發生時通過MotionEvent的getX()方法或getY()方法獲取到當前觸摸的坐標值,來對用戶的滑動方向進行判斷,并可在不同的Action狀態中做出相應的處理

mListView.setOnTouchListener(new View.OnTouchListener() {      @Override      public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()) {          case MotionEvent.ACTION_DOWN:            // 觸摸按下時的操作            break;          case MotionEvent.ACTION_MOVE:            // 觸摸移動時的操作            break;          case MotionEvent.ACTION_UP:            // 觸摸抬起時的操作            break;        }        return false;      } });

不僅僅只有上面的三種Action狀態,MotionEvent類中還定義了很多其它狀態,我們可以靈活的使用這些狀態

• MotionEvent.ACTION_DOWN:開始觸摸

• MotionEvent.ACTION_MOVE:觸摸移動

• MotionEvent.ACTION_UP:觸摸抬起

• MotionEvent.ACTION_OUTSIDE:觸摸范圍超過了UI邊界

• MotionEvent.ACTION_CANCEL:觸摸被取消時

• MotionEvent.ACTION_POINTER_DOWN:當有另外一個觸摸按下時(多點觸摸)

• MotionEvent.ACTION_POINTER_UP:當另一個觸摸抬起時(多點觸摸)

2、OnScrollListener

OnScrollListener來自AbsListView中的監聽事件,因為ListView直接繼承自AbsListView,所以在AbsListView中有很多ListView相關信息

OnScrollListener中有兩個回調方法

• public void onScrollStateChanged(AbsListView view, int scrollState):監聽滑動狀態的改變

• public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount):監聽滑動

在源碼中有其詳細的解釋

  /**   * Interface definition for a callback to be invoked when the list or grid   * has been scrolled.   */  public interface OnScrollListener {    /**     * The view is not scrolling. Note navigating the list using the trackball counts as     * being in the idle state since these transitions are not animated.     */    public static int SCROLL_STATE_IDLE = 0;    /**     * The user is scrolling using touch, and their finger is still on the screen     */    public static int SCROLL_STATE_TOUCH_SCROLL = 1;    /**     * The user had previously been scrolling using touch and had performed a fling. The     * animation is now coasting to a stop     */    public static int SCROLL_STATE_FLING = 2;    /**     * Callback method to be invoked while the list view or grid view is being scrolled. If the     * view is being scrolled, this method will be called before the next frame of the scroll is     * rendered. In particular, it will be called before any calls to     * {@link Adapter#getView(int, View, ViewGroup)}.     *     * @param view The view whose scroll state is being reported     *     * @param scrollState The current scroll state. One of     * {@link #SCROLL_STATE_TOUCH_SCROLL} or {@link #SCROLL_STATE_IDLE}.     */    public void onScrollStateChanged(AbsListView view, int scrollState);    /**     * Callback method to be invoked when the list or grid has been scrolled. This will be     * called after the scroll has completed     * @param view The view whose scroll state is being reported     * @param firstVisibleItem the index of the first visible cell (ignore if     *    visibleItemCount == 0)     * @param visibleItemCount the number of visible cells     * @param totalItemCount the number of items in the list adaptor     */    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,        int totalItemCount);  }

2.1 OnScrollSateChanged方法

OnScrollSateChanged根據scrollState來決定其回調的次數,它有三種模式:

• OnScrollListener.SCROLL_STATE_IDLE:滾動停止時的狀態

• OnScrollListener.SCROLL_STATE_STOUCH_SCROLL:觸摸正在滾動,手指還沒離開界面時的狀態

• OnScrollListener.SCROLL_STATE_FLING:用戶在用力滑動后,ListView由于慣性將繼續滑動時的狀態

當用戶沒有用力滑動時,OnScrollSateChanged方法只會回調2次,否則回調三次,我們在使用時通常會以設置Flag標志,來區分不同的滑動狀態,從而進行相應的處理

2.2 OnScroll方法

在ListView滾動時會一直被回調,它通過里面有三個參數來顯示當前ListView的滾動狀態

• firstVisibleItem:當前能看見的第一個item的ID(從0開始)

• visibleItemCount:當前可見的item總數

• totalItemCount:列表中適配器總數量,也就是整個ListView中item總數

注意:當前可見的item總數,包括屏幕中沒有顯示完整的item,如顯示一半的item也會算在可見范圍內

通過這三個參數,我么可以實現很多事件判斷,如:

(1)判斷當前是否滑動到最后一行

當前視圖中第一個item的ID加上當前屏幕中可見item的總數如果等于ListView中所有item總數時,就表示移動到了最后一行

if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {// 滾動到最后一行了}

(2)判斷滑動的方向

通過oldVisibleItem 記錄上一次firstVisibleItem的位置,再與滑動后的firstVisibleItem進行比較,就可得知滑動的方向

if (firstVisibleItem > oldVisibleItem) {// 向上滑動}if (firstVisibleItem < oldVisibleItem) {// 向下滑動}oldVisibleItem = firstVisibleItem;ListView也為我們提供了一些封裝好了的方法,來獲取item的位置信息// 獲取當前可見區域內第一個item的idmListView.getFirstVisiblePosition();// 獲取當前可見區域內最后一個item的idmListView.getLastVisiblePosition();

以上這篇Android ListView監聽滑動事件的方法(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康保县| 潜山县| 霍林郭勒市| 东源县| 荃湾区| 东海县| 东兴市| 文成县| 玛纳斯县| 夏津县| 阳西县| 宜章县| 玉环县| 民权县| 康保县| 丹棱县| 开封市| 台北市| 浙江省| 华阴市| 保定市| 武夷山市| 丽江市| 兰西县| 榆中县| 天祝| 平山县| 东源县| 密山市| 通州市| 墨玉县| 天等县| 长寿区| 抚州市| 延边| 古田县| 丰城市| 阿巴嘎旗| 苍山县| 金川县| 金川县|