基于ScrollView反弹效果的一些原理(可以看我另外一篇帖子),看了下ListView滚动的一些代码.发现这两者实现方式有些不太一样.
ListView根本没有继承使用View的ScrollBy和ScrollTo,而且它的移动到最上和最下的判断也打不一样,代码如下,截取自AbstractListView的trackMotionScroll(int,int)方法:
final int end = getHeight() - listPadding.bottom;
final int spaceBelow = lastBottom - end;
final int height = getHeight() - mPaddingBottom - mPaddingTop;
if (deltaY < 0) {
deltaY = Math.max(-(height - 1), deltaY);
} else {
deltaY = Math.min(height - 1, deltaY);
}
if (incrementalDeltaY < 0) {
incrementalDeltaY = Math.max(-(height - 1), incrementalDeltaY);
} else {
incrementalDeltaY = Math.min(height - 1, incrementalDeltaY);
}
final int firstPosition = mFirstPosition;
if (firstPosition == 0 && firstTop >= listPadding.top && deltaY >= 0) {
// Don't need to move views down if the top of the first position
// is already visible
return true;
}
if (firstPosition + childCount == mItemCount && lastBottom <= end && deltaY <= 0) {
// Don't need to move views up if the bottom of the last position
// is already visible
return true;
}
这个mFirstPosition是显示的第一个ListView的Item,firstPosition + childCount ==
mItemCount这句话的意思是可以显示最后的childCount条(这是个规律,自己可以算算),在加上lastBottom(也就是最后一个显
示item)比end(也就是ListView的最底部距离最上部的距离)小,一般情况下都是比它大,如图:
,firstTop
>= listPadding.top
和这个相反,也就是第一个item比paddingTop要大,如果ListView不设这个属性的话那就是0了.这里要说下不管是end、
firstTop或者是lastBottom意思都是距离它的最上面的组件或者是parent的距离,不是屏幕.详细的大家可以去看
trackMotionScroll.
我的实现是在基本不破坏原有功能的基础上加入了一些可以继续移动的代码,也就是使用View的scrollBy.
此为抛砖引玉,反弹效果刷新实现有点生硬,大家可以优化它,让它更流畅。
这种效果也应该有人写过,这是我自己的实现。提供附件下载,转载请注明出处。
- ListViewScroll.zip (83.7 KB)
- 下载次数: 20
发表评论
-
ScrollView嵌套Edittext
2015-04-08 18:26 842scrollview 中加入多个控件如 edittext 后会 ... -
android 布局式跑马灯,非TextView
2015-04-07 10:51 494如题,简单的实现了跑马灯效果,把Scroll.java放入an ... -
Android圆角图片
2015-03-11 17:44 693my_wane_shape.xml 快速圆角背景边框实现, ... -
SQLite多线程读写实践及常见问题总结
2015-02-13 17:06 944基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了一 ... -
android加速度感应
2015-01-19 10:25 14731.android测量数据 (1)android设备坐标系 ... -
MatrixCursor的使用
2015-01-19 09:49 1045ContentProvider对外共享数据的时候的query( ... -
Android 获取控件的宽高高级用法(MeasureSpec)
2015-01-15 14:23 998一个MeasureSpec封装了父 ... -
Android_GridView_GridView概述及实现水平滑动
2015-01-14 17:14 11511.GridView简介 GridView是ViewGroup ... -
Android MMS,SMS之常用Uri
2014-09-19 16:32 1323Android MMS,SMS之常用Uri Android ... -
android短彩信查询以及MMS表结构
2014-09-19 16:31 2236android短信的数据库的Uri是不公开的, 读取起来时灰常 ... -
使用Android自带DownloadManager下载文件
2014-08-19 11:04 767SDK在API Level 9中加入了DownloadMan ... -
android textview里链接点击事件,增加图片
2014-08-07 16:45 1145Android系统默认给TextView插入图片提供了三种方 ... -
android Home事件汇总
2014-07-18 11:30 1005方法一:android 4.0以后无法通过更改页面的类型来 ... -
Android风格与主题(style and theme)
2014-07-16 16:35 672Android xml风格和主题文 ... -
Android中播放声音的两种方法
2014-05-30 15:09 668在Android中,音频、视 ... -
android 杀进程方法
2014-05-26 17:43 1008关闭应用的方法: 1.System.exit(0); ... -
android service 生命周期
2014-04-21 16:16 787有了 Service 类我们如何启动他呢,有两种方法: ... -
解决ADB端口被占用的问题
2014-04-21 16:14 833究其源就是adb server没启动 经过分析整理如下: ... -
输入法隐藏打开
2013-12-23 14:24 817首次进入activity,如果有个edittex ... -
google经纬度互转
2013-07-11 16:34 935https://developers.google.com/ ...
相关推荐
在这个名为"AndroidListView反弹效果源码.zip"的压缩包中,包含了实现这一效果的源代码。这种效果的实现主要涉及到以下几个关键点: 1. **OverScroller**:这是Android系统提供的一个类,用于处理过度滚动动画。它...
"Android ListView反弹效果源码" 是一个针对ListView进行优化的资源包,它提供了实现ListView滚动反弹效果的代码。这个源码可能包括自定义滚动监听器、动画处理和视图处理等关键组件,旨在让ListView在滚动至顶部或...
本篇将详细解析实现Android ListView反弹效果的源码。 首先,反弹效果主要依赖于两个关键组件:OnScrollListener和 OverscrollByCompat 方法。OnScrollListener 是ListView的监听器,用来捕获用户的滚动事件;...
本篇文章将详细介绍如何在Android中实现ListView的反弹效果。 首先,我们需要明白,这个反弹效果主要涉及到两个关键组件:一是ListView本身,二是处理滑动手势和动画的库。在Android的开源社区中,有诸如“android-...
本压缩包中的"Android ListView反弹效果源码.zip"提供了实现这一功能的源代码参考。 首先,我们来看"源码说明.txt"文件,它可能包含了对源码的详细解释和使用指南。通常,开发者会在这里介绍实现反弹效果的关键类、...
本篇文章将详细介绍如何在Android中实现ListView的反弹效果。 首先,我们需要明白,这个反弹效果主要涉及到两个部分:滚动边界检测和动画处理。在Android中,我们可以利用AbsListView的OnScrollListener来监听...
这个压缩包文件“安卓Android源码——ListView反弹效果源码.zip”显然包含了实现ListView滚动到顶部或底部时的反弹效果的源代码。这种反弹效果,也被称为“橡皮筋效果”,常见于iOS系统中,给用户带来更自然、流畅的...
这个压缩包“小程序源码 辅助类库 ListView反弹效果源码.rar”似乎包含了实现ListView在滚动到顶部或底部时产生弹性反弹效果的源代码。这种效果常见于许多现代应用程序,它为用户提供了更加直观和动态的交互体验。 ...
ListView是Android系统中常见的一种用于展示大量数据的控件,尤其在早期的Android应用...以上就是关于ListView反弹效果的实现详解,通过这些步骤,你可以为你的Android应用增加一种吸引人的交互元素,提升用户体验。
这个压缩包"Android源码——ListView反弹效果源码_new_10.zip"显然包含了一个实现ListView反弹效果的源代码示例。反弹效果(Pull to Refresh)是用户下拉ListView时,头部会有一个回弹动画,通常用于刷新列表数据。...
本压缩包文件"Android源码——ListView反弹效果源码_new_10.7z"提供了实现这一功能的源代码,下面将详细介绍这个反弹效果的实现原理和技术要点。 首先,ListView的反弹效果主要通过重写OnScrollListener和...
本文将详细探讨如何通过源码实现Android ListView的反弹效果。 首先,我们需要理解反弹效果的原理。当用户滑动到ListView的顶部或底部时,如果继续滑动,ListView应该有一种回弹的动画效果,就像物理世界中的弹性...
本资源“Android ListView反弹效果源码.zip”就是提供了实现这种效果的源代码。 首先,我们要理解反弹效果的实现原理。通常,这种效果是通过自定义ListView的滚动监听器,结合物理学中的动量守恒定律来模拟的。在...
这个“Android ListView反弹效果源码”项目,很显然,是为学生提供的一种学习资源,帮助他们理解和实现ListView在滚动到底部或顶部时的“反弹”效果,这种效果在许多应用中常见,如聊天应用、新闻应用等,它给用户...