圓弧形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