圆弧形ListView(CircleList)

代码 :  https://github.com/dkmeteor/CircleList

角度/缩放比 可调
angle调至 180度 为半圆形

-------------------
主要效果为 Canvas和Matrix实现的效果,具体看源码就行了。
Java代码 

  • public void changeGroupFlag(Object obj) throws Exception  
  • {  
  •     Field[] f = obj.getClass().getSuperclass().getSuperclass().getSuperclass().getDeclaredFields(); // 获得成员映射数组  
  •     for (Field tem : f)   
  •     {  
  •         if (tem.getName().equals("mGroupFlags")) {  
  •            tem.setAccessible(true);  
  •            Integer mGroupFlags = (Integer)tem.get(obj);   
  •            int newGroupFlags = mGroupFlags & 0xfffff8;  
  •            tem.set(obj, newGroupFlags);  
  •         }  
  •     }  
  • }  


这个地方单独解释一下,反射修改了ListView的一个私有成员变量mGroupFlags,该成员变量 最后4位 对应
FLAG_CLIP_CHILDREN , FLAG_CLIP_TO_PADDING , FLAG_INVALIDATE_REQUIRED 和 FLAG_RUN_ANIMATION 

0xfffff8 末尾对应 1000
对应以上4个状态

在该状态下,ViewGroup dispatchDraw 的时候 不会调用 canvas.clipRect
这样ChildView 可以不受bounds限制绘制在ViewGroup任意位置.
具体流程在ViewGroup源码dispatchDraw部分



不知有没有更好的实现方式,反射修改私有成员变量总是不太好的....

圆弧形ListView(CircleList)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值