亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2017年03月13日 10:24:42   投稿:jingxian  
下面小編就為大家?guī)硪黄狝ndroid ListView監(jiān)聽滑動事件的方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

ListView的主要有兩種滑動事件監(jiān)聽方法,OnTouchListener和OnScrollListener

1、OnTouchListener

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

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狀態(tài),MotionEvent類中還定義了很多其它狀態(tài),我們可以靈活的使用這些狀態(tài)

• MotionEvent.ACTION_DOWN:開始觸摸

• MotionEvent.ACTION_MOVE:觸摸移動

• MotionEvent.ACTION_UP:觸摸抬起

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

• MotionEvent.ACTION_CANCEL:觸摸被取消時

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

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

2、OnScrollListener

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

OnScrollListener中有兩個回調(diào)方法

• public void onScrollStateChanged(AbsListView view, int scrollState):監(jiān)聽滑動狀態(tài)的改變

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

在源碼中有其詳細(xì)的解釋

  /**
   * 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根據(jù)scrollState來決定其回調(diào)的次數(shù),它有三種模式:

• OnScrollListener.SCROLL_STATE_IDLE:滾動停止時的狀態(tài)

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

• OnScrollListener.SCROLL_STATE_FLING:用戶在用力滑動后,ListView由于慣性將繼續(xù)滑動時的狀態(tài)

當(dāng)用戶沒有用力滑動時,OnScrollSateChanged方法只會回調(diào)2次,否則回調(diào)三次,我們在使用時通常會以設(shè)置Flag標(biāo)志,來區(qū)分不同的滑動狀態(tài),從而進(jìn)行相應(yīng)的處理

2.2 OnScroll方法

在ListView滾動時會一直被回調(diào),它通過里面有三個參數(shù)來顯示當(dāng)前ListView的滾動狀態(tài)

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

• visibleItemCount:當(dāng)前可見的item總數(shù)

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

注意:當(dāng)前可見的item總數(shù),包括屏幕中沒有顯示完整的item,如顯示一半的item也會算在可見范圍內(nèi)

通過這三個參數(shù),我么可以實現(xiàn)很多事件判斷,如:

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

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

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

(2)判斷滑動的方向

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

if (firstVisibleItem > oldVisibleItem) {
// 向上滑動
}
if (firstVisibleItem < oldVisibleItem) {
// 向下滑動
}
oldVisibleItem = firstVisibleItem;

ListView也為我們提供了一些封裝好了的方法,來獲取item的位置信息

// 獲取當(dāng)前可見區(qū)域內(nèi)第一個item的id
mListView.getFirstVisiblePosition();

// 獲取當(dāng)前可見區(qū)域內(nèi)最后一個item的id
mListView.getLastVisiblePosition();

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

相關(guān)文章

  • Android編程設(shè)計模式之中介者模式詳解

    Android編程設(shè)計模式之中介者模式詳解

    這篇文章主要介紹了Android編程設(shè)計模式之中介者模式,結(jié)合實例形式詳細(xì)分析了Android中介者模式的概念、原理、使用場景、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2017-12-12
  • Android、iOS和Windows Phone中的推送技術(shù)詳解

    Android、iOS和Windows Phone中的推送技術(shù)詳解

    這篇文章主要介紹了Android、iOS和Windows Phone中的推送技術(shù)詳解,推送技術(shù)的實現(xiàn)通常會使用服務(wù)端向客戶端推送消息的方式,也就是說客戶端通過用戶名、Key等ID注冊到服務(wù)端后,在服務(wù)端就可以將消息向所有活動的客戶端發(fā)送,需要的朋友可以參考下
    2015-01-01
  • DrawerLayout結(jié)合Tollbar實現(xiàn)菜單側(cè)滑效果

    DrawerLayout結(jié)合Tollbar實現(xiàn)菜單側(cè)滑效果

    這篇文章主要為大家詳細(xì)介紹了DrawerLayout結(jié)合Tollbar實現(xiàn)菜單側(cè)滑效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android自定義環(huán)形LoadingView效果

    Android自定義環(huán)形LoadingView效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義環(huán)形LoadingView效果的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android實現(xiàn)瘋狂連連看游戲之狀態(tài)數(shù)據(jù)模型(三)

    Android實現(xiàn)瘋狂連連看游戲之狀態(tài)數(shù)據(jù)模型(三)

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)瘋狂連連看游戲之狀態(tài)數(shù)據(jù)模型,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • android仿Adapter實現(xiàn)自定義PagerAdapter方法示例

    android仿Adapter實現(xiàn)自定義PagerAdapter方法示例

    這篇文章主要給大家介紹了關(guān)于android仿Adapter實現(xiàn)自定義PagerAdapter的相關(guān)資料,文中詳細(xì)介紹了關(guān)于PagerAdapter的用法,對大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Android開發(fā)之OkHttpUtils的具體使用方法

    Android開發(fā)之OkHttpUtils的具體使用方法

    這篇文章主要介紹了Android開發(fā)之OkHttpUtils的具體使用方法,非常具有實用價值,需要的朋友可以參考下
    2017-08-08
  • Android實現(xiàn)支持進(jìn)度條顯示的短信備份工具類

    Android實現(xiàn)支持進(jìn)度條顯示的短信備份工具類

    這篇文章主要介紹了Android實現(xiàn)支持進(jìn)度條顯示的短信備份工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android中EditText屏蔽第三方輸入法表情的方法示例

    Android中EditText屏蔽第三方輸入法表情的方法示例

    最近在工作終于遇到一個問題,因為第三方輸入法表情的問題導(dǎo)致Android中TextView的內(nèi)容顯示異常,只能想辦法解決了,下面這篇文章主要記錄了在處理Android中EditText屏蔽第三方輸入法表情的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Android實例代碼理解設(shè)計模式SOLID六大原則

    Android實例代碼理解設(shè)計模式SOLID六大原則

    程序設(shè)計領(lǐng)域, SOLID (單一功能、開閉原則、里氏替換、接口隔離以及依賴反轉(zhuǎn))是由羅伯特·C·馬丁在21世紀(jì)早期 引入的記憶術(shù)首字母縮略字,指代了面向?qū)ο缶幊毯兔嫦驅(qū)ο笤O(shè)計的基本原則
    2021-10-10

最新評論