ListView 实现阻尼回弹效果 并去除边缘阴影
来源:互联网 发布:php继承的几种方式 编辑:程序博客网 时间:2024/04/30 12:26
我们使用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); }}
转载:
http://www.apkbus.com/android-208825-1-1.html
http://bbs.csdn.net/topics/390350587?page=1#post-393524028
0 0
- ListView 实现阻尼回弹效果 并去除边缘阴影
- Android实现ListView阻尼式(下拉回弹)效果
- ScrollView实现阻尼回弹效果!
- ListView 拉出回弹效果 overscroll,阻尼效果
- 仿IOS阻尼回弹效果的ListView
- listView实现阻尼效果
- Android使用最简单的方式实现ListView 拉出回弹效果,阻尼效果(一)
- Android回弹阻尼效果的简单实现,非基于ListView,ScrollView.
- Android listview去除边缘阴影色
- ScrollView的阻尼回弹效果实现(仿qq空间)
- RecyclerView,ListView去除边缘动画效果
- 阻尼回弹效果的ScrollView嵌套GridView
- 阻尼回弹效果的ScrollView嵌套GridView
- android 去除ScrollVIew拉到尽头时再拉的阴影效果和个别机型的阻尼效果
- 自定义阻尼效果listview
- android ListView阻尼效果
- ListView阻尼效果
- 【Android实战】ListView的回弹效果实现
- HTTP Status Code
- 小波基函数的选择和小波构造
- eclipse中创建web service
- 盒子模型
- 阻拙总纂专兹纵驻左纂专赘撰纂籽罪综啄
- ListView 实现阻尼回弹效果 并去除边缘阴影
- Unity 3D 游戏上线之后的流水总结。
- 学习内嵌ie
- 数学常数
- 微信企业号,报错误 errcode 60011 no privilege to access
- 数据库高级教程(一)
- CentOS 7 引导win7开机
- 醉左紫诅紫棕渍琢邹走醉追庄抓租驻诅兹
- easyUI的treegrid添加节点(append)时间过长,设置等待(wait)遮罩效果