[Android]CircleList 圆弧形 ListView

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

 

[Android]CircleList 圆弧形 ListView
 

 

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部分

你可能感兴趣的:(android,list)