閱讀784 返回首頁    go 阿裏雲 go 技術社區[雲棲]


圓弧形ListView(CircleList)

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




源代碼 : 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部分



不知有沒有更好的實現方式,反射修改私有成員變量總是不太好的.....

最後更新:2017-04-03 08:26:14

  上一篇:go Win7怎麼快速開啟Administrator帳號?
  下一篇:go Win7怎麼快速開啟Administrator帳號?