我们使用ListView将位置拖到顶部和底部默认是没有回弹效果的,为了增加这个效果,方法如下:
1、开启overScrollMode为always
在布局中
android:overScrollMode="always"
或在代码中
setOverScrollMode(View.OVER_SCROLL_ALWAYS);
2、继承listview 覆盖overScrollBy方法,并且利用反射机制修改阴影效果为透明
public class BounceListView extends ListView { private static final int MAX_Y_OVERSCROLL_DISTANCE = 100; private Context mContext; private int mMaxYOverscrollDistance; public BounceListView(Context context) { super(context); mContext = context; initBounceListView(); } public BounceListView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; initBounceListView(); } public BounceListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; initBounceListView(); } private void initBounceListView() { // get the density of the screen and do some maths with it on the max // overscroll distance // variable so that you get similar behaviors no matter what the screen // size final DisplayMetrics metrics = mContext.getResources() .getDisplayMetrics(); final float density = metrics.density; mMaxYOverscrollDistance = (int) (density * MAX_Y_OVERSCROLL_DISTANCE); // this.setOverScrollMode(View.OVER_SCROLL_ALWAYS); try { Class<?> c = (Class<?>) Class.forName(AbsListView.class.getName()); Field egtField = c.getDeclaredField("mEdgeGlowTop"); Field egbBottom = c.getDeclaredField("mEdgeGlowBottom"); egtField.setAccessible(true); egbBottom.setAccessible(true); Object egtObject = egtField.get(this); // this 指的是ListiVew实例 Object egbObject = egbBottom.get(this); // egtObject.getClass() 实际上是一个 EdgeEffect 其中有两个重要属性 mGlow mEdge // 并且这两个属性都是Drawable类型 Class<?> cc = (Class<?>) Class.forName(egtObject.getClass() .getName()); Field mGlow = cc.getDeclaredField("mGlow"); mGlow.setAccessible(true); mGlow.set(egtObject, new ColorDrawable(Color.TRANSPARENT)); mGlow.set(egbObject, new ColorDrawable(Color.TRANSPARENT)); Field mEdge = cc.getDeclaredField("mEdge"); mEdge.setAccessible(true); mEdge.set(egtObject, new ColorDrawable(Color.TRANSPARENT)); mEdge.set(egbObject, new ColorDrawable(Color.TRANSPARENT)); } catch (Exception e) { e.printStackTrace(); } } @SuppressLint("NewApi") @Override protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { // This is where the magic happens, we have replaced the incoming // maxOverScrollY with our own custom variable mMaxYOverscrollDistance; return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent); } }
使用如上BounceListView就可以实现不带阴影的阻尼效果列表了。
相关推荐
ListView 去除边缘阴影、选中色、拖动背景色等
Android UI设计之<十>自定义ListView,实现QQ空间阻尼下拉刷新和渐变菜单栏效果,详见:http://blog.csdn.net/llew2011/article/details/51559694
重写ListView 实现Android ListView阻尼效果
自定义布局实现ScrollView ListView 普通布局的回弹效果的实现
android listview 下拉回弹刷新效果, 现在,QQ空间和新浪微博上的效果,是一个比较炫的效果。 你想让你的APP也有这样炫的效果吗? 赶快下载体验吧!
博客《PullScrollView详解(四)——完全使用listview实现下拉回弹(方法一)》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/48021931
android listview翻页阻尼效果
完整的小demo,功能不是很强大,实现了listview的伸展回弹功能
带阻尼效果的listview,阻尼效果可调节,需要可下载
博客《PullScrollView详解(五)——完全使用listview实现下拉回弹(方法二) 》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/48087649
listview实现跑马灯效果
实现ListView头部和尾部可伸展并回弹功能
Android ListView反弹效果源码,可以有更好的交互,值得推荐
Android使用listview实现通讯录侧滑效果,listview侧滑效果,这个可广泛应用于众多应用中,基础且实用的界面UI设计技巧。
自定义ListView实现下拉刷新效果 开发中难免会遇到自定义控件这类的,独自开发确实很伤脑经,这一边是关于自己新建一个类继承listview 实现下拉刷新提示效果,希望可以给大家在开发中起到提高效率,给初学者学习。...
listview实现checkbox多选效果,可动态加载数据,完美融合。
Android中ListView实现表格效果
android listview的上下拉动 背景组件进行伸缩回弹效果。
listview实现表格效果,表格线,带假数据,直接可以使用!