android ScrollView ListView的回弹效果

转载 2013年12月02日 17:46:06

平常我们在使用ScrollView或者ListView的时候,最终的效果在各个系统上并不相同,有的系统支持滑动到顶后能后还能继续向下滑动一段距离,比如魅族的系统,这样可以很清晰的提示用户到达边界,但是有的系统,比如MIUI并不支持,其实android系统默认是支持这种滑动方式的,就在函数:

[java] view plaincopy
  1. protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)  


这个函数是定义在View中的,在滑动到边界的时候系统会调用这个函数
其中maxOverScrollX和maxOVerScrollY为超出边界的最大值,但是系统默认值是0,既不会超出边界,有些定制过得系统会修改此值,就实现了回弹的效果


我们要实现这种回弹效果,只要继承ScrollView或者ListView,重写 overScrollBy 方法,修改参数即可,下面以ListView为例

[java] view plaincopy
  1. package com.example.test;  
  2.   
  3. import android.content.Context;  
  4. import android.util.AttributeSet;  
  5. import android.widget.ListView;  
  6.   
  7. public class ScrollBackListView extends ListView{    
  8.     private static final int MAX_SCROLL = 200;    
  9.     private static final float SCROLL_RATIO = 0.5f;// 阻尼系数  
  10.          
  11.     private Context mContext;    
  12.          
  13.     public ScrollBackListView(Context context){    
  14.         super(context);    
  15.         mContext = context;    
  16.     }    
  17.          
  18.     public ScrollBackListView(Context context, AttributeSet attrs){    
  19.         super(context, attrs);    
  20.         mContext = context;    
  21.     }    
  22.          
  23.     public ScrollBackListView(Context context, AttributeSet attrs, int defStyle){    
  24.         super(context, attrs, defStyle);    
  25.         mContext = context;    
  26.     }    
  27.          
  28.     @Override    
  29.     protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent){     
  30.         int newDeltaY = deltaY;  
  31.         int delta = (int) (deltaY * SCROLL_RATIO);  
  32.         if (delta != 0) newDeltaY = delta;  
  33.         return super.overScrollBy(deltaX, newDeltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, MAX_SCROLL, isTouchEvent);      
  34.     }  
  35. }  


其中deltaX,deltaY为本次滑动偏移,scrollX,scrollY为当前总偏移,我们可以给deltaY乘以一个小数来达到一种阻尼的效果


结果截图:

相关文章推荐

Android回弹阻尼效果的简单实现,非基于ListView,ScrollView.

好久没有写Android博客了,这段时间有点浮躁,静不下心来写。趁今天周五心情好点,写个简单点的技术实现。 先简单说说回弹阻尼效果的思路,先自定义一个ViewGroup ----- ReboundE...

Android 弹性ListView和ScrollView 简单优雅地实现回弹效果

Android 弹性滚动view的回弹效果,简单实现思路是重写overScrollBy方法。将原先的最大溢出值0改为自定义的值200。 replaced the incoming maxOverS...

ListView和ScrollView的下拉和上拉的回弹效果

Android中是没有下拉和上拉的回弹效果的,但是有滚动到顶部和底部的光影效果,由EdgeEffect类来操作的。但是我们发现QQ,微信,支付宝等在下拉和上拉的都有一定的回弹效果,用户操作起来感觉蛮流...

Android 自定义ScrollView 支持惯性滑动,惯性回弹效果。支持上拉加载更多

Android 自定义ScrollView 支持惯性滑动,惯性回弹效果。支持上拉加载更多

android listview 下拉回弹刷新效果

  • 2013年04月25日 18:45
  • 74KB
  • 下载

Android实现ListView阻尼式(下拉回弹)效果

最近想模仿MIUI V5的短信里面的一个gognn

android ListView 仿IOS 回弹效果

改造了一下ListView,大家可以根据大概把scrollView也改成同样的效果

Android超简单实现listview上下拉伸回弹动画效果

超简单实现listview上下拉伸回弹动画效果希望能帮到大家,共同进步import android.annotation.SuppressLint; import android.content.Co...

在android4.1及之后版本如何恢复ListView/GridView下拉空白回弹的效果

在android4.1及之后版本如何恢复ListView/GridView下拉空白回弹的效果 [DESCRIPTION] 在Android 4.0及以前的版本,MTK有在Google默认模糊边...

Android使用最简单的方式实现ListView 拉出回弹效果,阻尼效果(一)

使用最简单的方式实现ListView 拉出回弹效果,阻尼效果 首先说一下坑 简介 实现 首先说一下坑 Android 9 之后才新增的API. 简介(overScrollBy方法,只要带滑动的都...
  • jsonnan
  • jsonnan
  • 2017年06月21日 09:22
  • 324
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android ScrollView ListView的回弹效果
举报原因:
原因补充:

(最多只允许输入30个字)