让ListView自动滚动
来源:互联网 发布:手机淘宝差评怎么写 编辑:程序博客网 时间:2024/05/16 14:13
原文转载:http://blog.jpardogo.com/autoscroll-a-listview-with-listviewautoscrollhelper/
我想要实现一种效果,就是能够让ListView在没有用户交互的时候,可以自动滚动。
之前有个比较笨拙的方法。说实话,我从来就不喜欢这种方法,手动创建一个计时器或者线程来处理它停止和重新启动。
每次看到采用这种方法的代码,我都觉得很无奈。所以,我决定,要去找到更加优雅的方式来实现。
考虑实现的可能性,不自觉的在我脑海中出现AutoScrollHelper类,它是一个工具类,赋予View于自动滚动的功能。
如果你想要在ListView实现这种功能,那么可以使用AutoScrollHelper的针对ListView的子类 ListViewAutoScrollHelper
ListViewAutoScrollHelper类可以实现,当用户滑动或者点击listview之后,启动autoScroll的自动滚动功能。
ListViewAutoScrollHelper类有三个选项:
1.EDGE TYPE INSIDE:
edge type 类型是在界面的不包括扩展的范围内指定一个活动的区域。
2.EDGE TYPE INSIDE_EXTEND:
edge type 类型是在界面的包括扩展的范围内指定一个活动的区域。
3.EDGE TYPE OUTSIDE:
edge type 类型是在界面的包括扩展的范围之外指定一个活动的区域。
为了实现刚刚所说的功能,我模拟系统的消息传递,将用户操作的action_move参数传递给listView。代码如下:
private void startAutoScroll() { getListView().post(new Runnable() { @Override public void run() { forceScroll(); } });}private void forceScroll() { MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_MOVE, mListView.getWidth()/2, -1, 0); mScrollHelper.onTouch(mListViewLeft, event);}
上面的方法,可以让ListViewAutoScrollHelper周期性的调用其他的scrollTargetBy函数。接下来,我们就要实现这个scrollTargetBy,并在函数体内,设置需要滚动的偏移量。
代码如下:
mScrollHelper = new ListViewAutoScrollHelper (mListView) { @Override public void scrollTargetBy(int deltaX, int deltaY) { mListView.smoothScrollBy(2, 0); } };
哈哈,是不是很酷,有了AutoScrollHelper,就可以和你的定时器说再见啦!
现在接下来,我们更关心的是,怎么样,让用户点击交互之后,listview就可以滚动起来。一起往下研究吧!
我们要想到,我们接下来要的需求。
第一: 检测用户的触摸交互,可以用OnTouch函数来实现。
第二: 知道用户的交互之后,就可以让AutoScrollHelper进行工作了。但是又怎么让AutoScrollHelper停止工作呢。因此可以使用onScrollStateChanged函数来对滚动做监听。
根据以上问题,编写代码如下:
@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mActionDown=true; break; case MotionEvent.ACTION_UP: mActionDown=false; break; } return mScrollHelper.onTouch(v, event);}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case SCROLL_STATE_IDLE: if(!mActionDown){ forceScroll(); } break; }}
大体就这样吧,拼拼凑凑,思路就是这样。
题外话:酷狗音乐中的歌词滚动很多人不知道怎么用textview类和scrollto函数。通过这篇文章,是否已经有了更多的思路啦?
- 让ListView自动滚动
- 让ListView自动滚动
- 让ListView自动滚动
- 自动滚动ListView
- ListView自动滚动方法
- ListView自动滚动方法
- ListView自动滚动方法
- ListView 自动滚动
- ListView自动滚动方法
- ListView实现自动滚动
- ListView实现自动滚动
- ListView 自动滚动
- ListView实现自动滚动
- listview自动滚动动画
- listView设置自动滚动
- 让ListView滚动到底部
- Android让ListView自行滚动
- 控制ListView的自动滚动
- 快速傅立叶变换(FFT)C语言函数
- 为什么浏览器User-agent总是有Mozilla字样——User-agent String里的历史故事
- ubuntu server安装配置jdk
- 【cocos2d-x-3.1.1系列4】cocos2d-x3.1.1.渲染过程源码简略过程
- Python写的一个爬虫程序
- 让ListView自动滚动
- 单向链表
- 一个匹配数字和字母密码的正则表达式
- java中JNI的使用之JNIEnv类型中方法的使用
- 把二叉树打印成多行
- MySQL基本知识点
- struts2+Hibernate遇到的问题总结
- loop设备及losetup命令介绍
- Unicode文件头的标识