圆弧形ListView(CircleList)

来源:互联网 发布:手机免费下载电影软件 编辑:程序博客网 时间:2024/05/18 14:22
代码 : 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)

0 0
原创粉丝点击