日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)

發(fā)布時間:2023/12/1 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android listview ontouchlistener,Android ListView监听滑动事件的方法(详解) 小編覺得挺不錯的,現(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)有另外一個觸摸按下時(多點(diǎn)觸摸)

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

2、OnScrollListener

OnScrollListener來自AbsListView中的監(jiān)聽事件,因?yàn)長istView直接繼承自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ù),我么可以實(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)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。