我们使用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// sizefinal 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")@Overrideprotected 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);}
}

转载:

http://www.apkbus.com/android-208825-1-1.html

http://bbs.csdn.net/topics/390350587?page=1#post-393524028

ListView 实现阻尼回弹效果 并去除边缘阴影相关推荐

  1. Android webView 实现阻尼回弹效果

    iOS webView默认滑动到顶部或者底部的时候,还可以继续通过手指拉扯滑动,松手后回弹:而Android webView默认是不行的,要实现跟iOS一样的效果,就需要自定义webView. ios ...

  2. android 列表回弹效果,Android ListView ScrollView回弹效果

    ios中对可以滚动的视图都在系统层面上实现了触碰到边缘的阻尼回弹效果,用户一看便知自己的操作已经到了边界.android中也有类似的方案,不过当到达边界的时候不是用阻尼的方式,而是逐渐显示一个渐变颜色 ...

  3. 【Flutter 问题系列第 5 篇】Flutter 去除 ListView 组件中的蓝色回弹效果

    这是[Flutter 问题系列第 5 篇],如果觉得有用的话,欢迎关注专栏. ListView 组件默认的滑动效果如下 可以看到,在顶部向下拖动或者到底部向上拖动时,会有一个蓝色的回弹效果. 这是因为 ...

  4. android 按钮回弹效果,Android仿IOS回弹效果 支持任何控件

    本文实例为大家分享了Android仿IOS回弹效果的具体代码,供大家参考,具体内容如下 效果图: 导入依赖: dependencies { // ... compile 'me.everything: ...

  5. Android取消RecyclerView、ListView、ScrollView、HorizontalScrollView滑动到边缘闪现灰白色水波纹动画

    Android取消RecyclerView.ListView.ScrollView.HorizontalScrollView滑动到边缘闪现灰白色水波纹动画 标准的Android RecyclerVie ...

  6. 仿IOS回弹效果支持任何控件

    效果图: 导入依赖: dependencies {// ...compile 'me.everything:overscroll-decor-android:1.0.4' } RecyclerView ...

  7. android 布局回弹,Android仿IOS回弹效果 支持任何控件

    本文实例为大家分享了Android仿IOS回弹效果的具体代码,供大家参考,具体内容如下 效果图: 导入依赖: dependencies { // ... compile 'me.everything: ...

  8. Android 列表越界回弹效果实现

    一.越界回弹效果的例子 二.效果拆分 下拉.上拉越界回弹:已到达列表顶部,执行下拉操作,此时会进行越界回弹 惯性滑动 越界回弹:快速滑动列表,列表已到达底部,但由于惯性会继续前进一部分,此时会根据速度 ...

  9. android组件的下拉回弹,Android自定义控件仿ios下拉回弹效果

    网上有很多类似的文章,大多数还是继承listview来实现(主要是listview.addHeaderView()和listview.addFooterView在listview的首尾添加view,也 ...

最新文章

  1. devexpress toolbar 填充整行宽度
  2. dotnet调用node.js写的socket服务(websocket/socket/socket.io)
  3. 源码|批量执行invokeAll()多选一invokeAny()
  4. ViewPage+Fragment的使用例子
  5. docker的安全管理与TLS/LLS加密通信
  6. Json-lib 需要的 jar 包
  7. ZGY的Excel特征提取器初期版本完成
  8. 理解 Angular 中的 $digest() 和 $apply()
  9. java把对象放入数组_如何将对象添加到数组
  10. ubuntu18.04安装mysql8.0
  11. 0点睡觉很会养生”苏宁高管的这话让IT人很憋屈
  12. 如何设置高度为1的分隔线
  13. 使用ps删除多余的内容
  14. iconfont图标
  15. Android改机 安卓改机软件 免root/不刷机/拒绝Xposed 实现 技术分析
  16. matlab ttest空值,用MATLAB做T检验(ttest)
  17. 奥西450的服务器系统,奥西TDS450
  18. 2020上传透明头像易语言源码 附成品
  19. html中this的作用,JavaScript 中的 this :工作原理和陷阱
  20. Apache Sling App CMS <1.1.4 存在反射型XSS漏洞(CVE-2022-46769)

热门文章

  1. 儿童的31个“敏感期”特点及建议(转载)
  2. 苹果笔到底有没有必要买?苹果平板电容笔排行榜
  3. 【游戏运营】【实战】首充分析——王国纪元
  4. lol8.18服务器不稳定,英雄联盟8.18客户端崩溃,玩家表示要退游,官方会给什么补偿?...
  5. “GANs之父”Goodfellow 38分钟视频亲授:如何完善生成对抗网络?(上)
  6. 绍兴市越城区人大常委会主任徐荻一行莅临迪捷软件调研指导
  7. 阿拉丁年会 - 小程序开发者年度盛会 报告内容摘要
  8. 为什么微信转账,对方收款要确认,而支付宝却不用?
  9. FLUENT算例2:混合弯管的流动与传热
  10. java通信—网络聊天室网络画板(简陋版)