`

ListView反弹效果实现

 
阅读更多

基于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.
  此为抛砖引玉,反弹效果刷新实现有点生硬,大家可以优化它,让它更流畅。
  这种效果也应该有人写过,这是我自己的实现。提供附件下载,转载请注明出处。

分享到:
评论

相关推荐

    AndroidListView反弹效果源码.zip

    在这个名为"AndroidListView反弹效果源码.zip"的压缩包中,包含了实现这一效果的源代码。这种效果的实现主要涉及到以下几个关键点: 1. **OverScroller**:这是Android系统提供的一个类,用于处理过度滚动动画。它...

    Android ListView反弹效果源码.rar

    "Android ListView反弹效果源码" 是一个针对ListView进行优化的资源包,它提供了实现ListView滚动反弹效果的代码。这个源码可能包括自定义滚动监听器、动画处理和视图处理等关键组件,旨在让ListView在滚动至顶部或...

    Android ListView反弹效果源码

    本篇将详细解析实现Android ListView反弹效果的源码。 首先,反弹效果主要依赖于两个关键组件:OnScrollListener和 OverscrollByCompat 方法。OnScrollListener 是ListView的监听器,用来捕获用户的滚动事件;...

    ListView反弹效果

    本篇文章将详细介绍如何在Android中实现ListView的反弹效果。 首先,我们需要明白,这个反弹效果主要涉及到两个关键组件:一是ListView本身,二是处理滑动手势和动画的库。在Android的开源社区中,有诸如“android-...

    Android ListView反弹效果源码.zip

    本压缩包中的"Android ListView反弹效果源码.zip"提供了实现这一功能的源代码参考。 首先,我们来看"源码说明.txt"文件,它可能包含了对源码的详细解释和使用指南。通常,开发者会在这里介绍实现反弹效果的关键类、...

    android中实现listview的反弹效果

    本篇文章将详细介绍如何在Android中实现ListView的反弹效果。 首先,我们需要明白,这个反弹效果主要涉及到两个部分:滚动边界检测和动画处理。在Android中,我们可以利用AbsListView的OnScrollListener来监听...

    安卓Android源码——ListView反弹效果源码.zip

    这个压缩包文件“安卓Android源码——ListView反弹效果源码.zip”显然包含了实现ListView滚动到顶部或底部时的反弹效果的源代码。这种反弹效果,也被称为“橡皮筋效果”,常见于iOS系统中,给用户带来更自然、流畅的...

    小程序源码 辅助类库 ListView反弹效果源码.rar

    这个压缩包“小程序源码 辅助类库 ListView反弹效果源码.rar”似乎包含了实现ListView在滚动到顶部或底部时产生弹性反弹效果的源代码。这种效果常见于许多现代应用程序,它为用户提供了更加直观和动态的交互体验。 ...

    listview反弹实现详解

    ListView是Android系统中常见的一种用于展示大量数据的控件,尤其在早期的Android应用...以上就是关于ListView反弹效果的实现详解,通过这些步骤,你可以为你的Android应用增加一种吸引人的交互元素,提升用户体验。

    Android源码——ListView反弹效果源码_new_10.zip

    这个压缩包"Android源码——ListView反弹效果源码_new_10.zip"显然包含了一个实现ListView反弹效果的源代码示例。反弹效果(Pull to Refresh)是用户下拉ListView时,头部会有一个回弹动画,通常用于刷新列表数据。...

    Android源码——ListView反弹效果源码_new_10.7z

    本压缩包文件"Android源码——ListView反弹效果源码_new_10.7z"提供了实现这一功能的源代码,下面将详细介绍这个反弹效果的实现原理和技术要点。 首先,ListView的反弹效果主要通过重写OnScrollListener和...

    Android代码-ListView反弹效果源码.zip

    本文将详细探讨如何通过源码实现Android ListView的反弹效果。 首先,我们需要理解反弹效果的原理。当用户滑动到ListView的顶部或底部时,如果继续滑动,ListView应该有一种回弹的动画效果,就像物理世界中的弹性...

    Android ListView反弹效果源码.zip源码资源下载

    本资源“Android ListView反弹效果源码.zip”就是提供了实现这种效果的源代码。 首先,我们要理解反弹效果的实现原理。通常,这种效果是通过自定义ListView的滚动监听器,结合物理学中的动量守恒定律来模拟的。在...

    Android ListView反弹效果源码-IT计算机-毕业设计.zip

    这个“Android ListView反弹效果源码”项目,很显然,是为学生提供的一种学习资源,帮助他们理解和实现ListView在滚动到底部或顶部时的“反弹”效果,这种效果在许多应用中常见,如聊天应用、新闻应用等,它给用户...

Global site tag (gtag.js) - Google Analytics