android去掉ListView顶部和底部的蓝色渐变效果

 
觉得这个东西不好看,就想把它去掉。网上查了一些资料,找到了源码中设置这种效果的地方:
 
 
AbsListView类中的两个成员变量:
 
private EdgeEffect mEdgeGlowTop;
private EdgeEffect mEdgeGlowBottom;

然后再看看EdgeEffect类的源码:

EdgeEffect类中有两个成员变量:

private final Drawable mEdge;

private final Drawable mGlow;

在创建EdgeEffect实例时,会加载系统资源R.drawable.overscroll_edge和R.drawable.overscroll_glow对其进行赋值。

想要去掉这种效果的话,只要通过反射,将这两个属性设置为空白的Drawable资源就行了。代码如下:

 1 /**
 2      * 去掉ListView顶部和底部的蓝色渐变
 3      * 
 4      * @param absListView
 5      */
 6     public static void cancelFadingEdge(AbsListView absListView) {
 7 
 8         // 创建EdgeEffect实例,将mEdge和mGlow设置为空的Drawable
 9         EdgeEffect edgeEffect = new EdgeEffect(absListView.getContext());
10         Class<?> eeClz = edgeEffect.getClass();
11         setField(eeClz, "mEdge", edgeEffect, new ColorDrawable());
12         setField(eeClz, "mGlow", edgeEffect, new ColorDrawable());
13 
14         // 给ListView的mEdgeGlowTop和mEdgeGlowBottom赋值
15         try {
16             Class<?> lvClz = Class.forName("android.widget.AbsListView");
17             setField(lvClz, "mEdgeGlowTop", absListView, edgeEffect);
18             setField(lvClz, "mEdgeGlowBottom", absListView, edgeEffect);
19         } catch (Exception e) {
20             e.printStackTrace();
21         }
22     }
23 
24 /**
25      * 通过反射的方式设置变量的值
26      * 
27      * @param clz
28      *            属性所在类的Class
29      * @param fieldName
30      *            属性名
31      * @param obj
32      *            要赋值的对象
33      * @param value
34      *            值
35      */
36     private static void setField(Class<?> clz, String fieldName, Object obj,
37             Object value) {
38         try {
39             Field field = clz.getDeclaredField(fieldName);
40             field.setAccessible(true);
41             field.set(obj, value);
42         } catch (Exception e) {
43             e.printStackTrace();
44         }
45     }

 

 

注意:
 
mEdge.set(edgeEffect, new ColorDrawable());   
mEdgeGlowTop.set(absListView, edgeEffect);  

这两个地方不能将属性设置为null,否则会出现空指针异常,因为源码里认为它们不为空,进行了一些操作。

转载于:https://www.cnblogs.com/koa875/p/3680432.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值