`

[Android]CircleList 圆弧形 ListView

阅读更多

Displaying list items in a semi-circle with a nice fish eye effect

 


 

 

source code: 

 

https://github.com/dkmeteor/CircleList
Canvas和Matrix实现的效果,具体看源码就行了。
    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部分
  • 大小: 497.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics