android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)
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的id
mListView.getFirstVisiblePosition();
// 获取当前可见区域内最后一个item的id
mListView.getLastVisiblePosition();
以上这篇Android ListView监听滑动事件的方法(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)相关推荐
- Android屏幕触摸监听,Android在Fragment中实现监听触摸事件
本文给大家介绍的是监听Fragment的触摸事件实现.如果大家有更好的机制,可以留言交流,下面来看看详细的介绍: 大家都知道,我们的activity中有onTouchEvent方法,可以用来实现触摸事 ...
- 开发笔记- iOS监听某些事件的方法简单梳理
----Make by -LJW 转载请注明出处--- 通知(NSNotificationCenter\NSNotification) 任何对象之间都可以传递消息 使用范围(多对多) 1个对象可以发通 ...
- android 清空数组缓存,Android数据持久化之读写SD卡中内容的方法详解
本文实例讲述了Android数据持久化之读写SD卡中内容的方法.分享给大家供大家参考,具体如下: 前面文章里讲的那三个方法:openFileOutput.openFileInput虽然都能通过流对象O ...
- centos oracle 修改监听服务名_Oracle架构详解
01 前言 学习任何一门科学,都要从他的背景和宏观体系开始,那么数据库也不例外. 体系结构为什么重要,因为体系结构是对一个系统的框架描述,只有从宏观上掌握它的物理组成.文件组成和各种文件组成,在实际工 ...
- Android scrollview监听滑动状态
首先说一下 NestedScrollView 的滑动事件的监听, 如果使用 nestedScrollView.setOnScrollChangeListener(new View.OnScrollCh ...
- Android 关于在Activity中监听ListView
Android 开发时,最常用的控件之一就是ListView了,而使用ListView的同时,必然需要对它设置监听器,常用的监听器有这么几个: 1. OnItemClickListener // 监听 ...
- Android RecyclerView 监听滑动
今天,简单讲讲Android 如何监听滑动. 不废话了,主要是需要做一个功能,实现RecyclerView滑动时,让一个标题栏固定显示在顶部. 基本知识: 列表的滚动一般分为两种: 手指按下 -> ...
- Android初级,实现网易云音乐歌曲列表界面效果,播放界面效果,ListView,ViewPager方法详解
初学Android初级,第一篇博客文章,如有错误,还望批评指正! 本文主要内容以网易云音乐歌曲列表界面效果代码,播放音乐界面效果代码为主,并将ListView和ViewPager作为实现界面滑动功能的 ...
- android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键
本文将带你了解Android应用开发之react-native 监听Android物理返回键,希望本文对大家学Android有所帮助. 1. componentWillMount(){ ...
最新文章
- R语言nchar函数统计字符串中字符个数实战
- 说说你对 HTML 语义化的理解?
- mysql中使用BETWEEN AND
- lost connection to MySQL server at waiting for initial communication packet,system error:o
- elk 聚合日志_使用ELK堆栈进行日志聚合
- python会不会出4_无极4网人生苦短,Python会不会被取代?国外网友
- rlwrap解决sqlplus上下键和backspace键找历史命令
- 应用程序无法正常启动(0xc000007b)错误的解决
- Bootstrap 3.0正式版发布!
- python 面向对象的封装_Python面向对象封装操作案例详解
- 一本通————1244 和为给定数
- 峥果智能连接不到服务器,峥果浴霸 ESP8285版本 固件
- GAMIT处理GLONASS数据
- 维刻柠檬鲜果冰怎么样?
- 2021年中国理财产品行业之新发行银行理财产品概览,中国银行发行2359只,位居榜首「图」
- python安装目录插件
- 点计算机无桌面图标,电脑桌面没有任何图标并且点鼠标右键没反应 - 卡饭网
- hive打patch流程说明
- 最新全国姓名报告出炉!
- html5微信语音转文字,文字转换语音软件:我有个朋友不会识字 怎么能把微信上别人发给他的文字转换成语音...