android listview滚动到顶部
1.为了实现类似IOS点击状态栏,列表回滚到顶部的功能(要平滑滚动效果),android上点击一个按钮或是图片什么的也可以让listview一次性滚动到顶部(滑动太多页时,一次可能滚不到顶部,使用handler定时监听,继续滚动,直至回到顶部)
public static void scrollToListviewTop(final AbsListView listView)
{
listView.smoothScrollToPosition(0);
final Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
if (listView.getFirstVisiblePosition() > 0)
{
listView.smoothScrollToPosition(0);
handler.postDelayed(this, 100);
}
}
}, 100);
}
此方法的优点是:适用于任何的listview(item单一样式的,多种样式的都可以),而且不存在界面显示问题
缺点是:滑动数据量很大时,回滚时间会比较长。改进办法是将handler里的这两行代码:
listView.smoothScrollToPosition(0);
handler.postDelayed(this, 100);
换成:
listView.setSelection(0);再根据需要修改间隔时间(100毫秒),就完美啦~~~
2.对于单一样式且数据较少的listview,滑动停止时可以计算出滚动的高度,回滚时使用listView.smoothScrollBy(getScrollY(), 500);
listview滚动高度原理是假设每个item的高度是一定的(多数情况下的确如此),那么只要知道当前在第几个item,就可以计算出总的高度,因为第一个可见item的一部分可能已经移出了边界,所以再通过mListView.getChildAt(0)获得第一个子view,使用
getTop()方法计算出这个偏差(得到的一般是负数)。因为是回滚,所以最后滚动距离要是负数,另外可能会有一定的误差,适当的加上个负数,综合起来就可以计算出当前ListView的滚动高度。这种滚动效果比较自然,快到顶部时滚动速度越来越慢,最后停止。
public int getScrollY()
{
View c = listView.getChildAt(0);
if (c == null)
{
return 0;
}
int firstVisiblePosition = listView.getFirstVisiblePosition();
int top = c.getTop();
if (firstVisiblePosition == 0)
{
return top;
}
else
{
return top - (firstVisiblePosition - 1) * c.getHeight() - 17;
}
}
3.如果只要求回到顶部,不需要滚动效果的话,很简单,只需要调用listview.setSelection(0)就ok了。
………………………………………………………………华丽的分割线………………………………………………………………………………
ps:顺便记一下修改listview快速滚动滑块的方法:
try
{
Field f = AbsListView.class.getDeclaredField("mFastScroller");
f.setAccessible(true);
Object o = f.get(listView);
f = f.getType().getDeclaredField("mThumbDrawable");
f.setAccessible(true);
Drawable drawable = (Drawable) f.get(o);
drawable=context.getResources().getDrawable(R.drawable.transparent);
f.set(o, drawable);
}
catch (Exception e)
{
LogUtils.error(e + "");
}
android listview滚动到顶部的更多相关文章
- Windows Phone 8.1开发:如何让ListView滚动到顶部,回到第一条?
Windows Phone 8.1开发中,ListView向下滑动了半天,用户如果突然想回头看看第一条数据怎么办? 如何让listView滚动到顶部,回到第一条? 很简单,一行代码.调用ListVie ...
- Android ListView 滚动的N种方法
Android 里面让ListView滚动有N种方法,这儿列举三种: 我的需求是通过按键让Listview滚动起来,当然这些按键不是通过Android标识接口传输过来的,所以不能通过监听按键事件来实现 ...
- Android ScrollView 滚动到顶部
有时候使用ScrollView,里边控件比较多的时候,打开界面,会滑到底部,如果要设置滑动到顶部,一般有两种方法 1.使用fullScrol(),scrollView.fullScroll(Scrol ...
- Android ListView滚动到指定的位置
这篇文章主要给大家介绍了Android中的ListView如何滚动到指定的位置,文章给出了两种解决的方法,并给出详细的示例代码,相信会对大家的理解和学习很有帮助,有需要的朋友们下面来一起看看吧. 本文 ...
- ListView滚动到顶部
videoAdapter.notifyDataSetChanged();videoListView.setSelection(0); 注意顺序先notify后setSelection
- ListView(1)几个重要属性,关闭滚动到顶部,底部的动画,item之间的分割线,背景等
见表: android:stackFromBottom="true" 设置该属性之后你做好的列表就会显示你列表的最下面,值为true和false android:transcrip ...
- “Win10 UAP 开发系列”之 在MVVM模式中控制ListView滚动位置
这个扩展属性从WP8.1就开始用了,主要是为了解决MVVM模式中无法直接控制ListView滚动位置的问题.比如在VM中刷新了数据,需要将View中的ListView滚动到顶部,ListView只有一 ...
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...
- android ListView滚动条监听判断滚动到底部还是顶部
代码: lv.setOnScrollListener(new OnScrollListener() { public void onScrollStateChanged(AbsListView vie ...
随机推荐
- CreateThread与_beginthread, _beginthreadex创建线程的基本概念和区别(1)
这三个函数都可以创建新的线程,但都是如何创建的呢?当然MSDN文档最权威: Creates a thread to execute within the virtual address space o ...
- Java 输出通过 InetAddress 获得的 IP 地址数组
使用 InetAddress 获取 IP 地址会得到一个 byte 数组 如果你直接输出这个数组,你会发现 IP 地址中的某些位变成了负数 比如 61.135.169.105 会输出成 61.-121 ...
- 4.5 HOOK分发函数
4.5 HOOK分发函数 本节开始深入的探讨键盘的过滤与反过滤.有趣的是,无论是过滤还是反过 滤,其原理都是进行过滤.取胜的关键在于:谁将第一个得到信息. 黑客可能会通过修改一个已经存在的驱动对象(比 ...
- [POJ 1521]--Entropy(哈夫曼树)
题目链接:http://poj.org/problem?id=1521 Entropy Time Limit: 1000MS Memory Limit: 10000K Description A ...
- [Swust OJ 842]--实验室和食堂(最短路,Dijkstra算法)
题目链接:http://acm.swust.edu.cn/problem/842/ Time limit(ms): 1000 Memory limit(kb): 10000 Description ...
- fastxml Jackson JsonNode (ObjectNode) 转 List
做环聊开发, Java 后台示例 用的 fastxml Jackson 解析json(擦, 狗屎, 不能支持下国产吗?) 有的json字段是数组, 发现不会解析了, 谷歌了下, 用以下方法可行,(不知 ...
- HDU 1004 MAP【STL__map_的应用】
强大的MAP,今天终于开始好好学习一次. map内部是用红黑树维持的有序结构. 定义:map<int,string>mapStudent; 查找的时间复杂度为对数级别. 1.构造方法学习两 ...
- (Problem 4)Largest palindrome product
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2 ...
- JavaScript弹出框
confirm(str); 参数说明: str:在消息对话框中要显示的文本 返回值: Boolean值 返回值: 当用户点击"确定"按钮时,返回true 当用户点击"取消 ...
- java基础之注解
包含成员变量及方法的注解称之为元数据, 不包含任何成员的注解称之为标记. 用@interface定义注解, 使用类似于接口方法的方式来定义注解的属性,其中返回值成为属性的类型,方法名为属性的名称. p ...