圆弧形ListView(CircleList)
来源:互联网 发布:video.js 添加广告 编辑:程序博客网 时间:2024/05/18 14:26
Displaying list items in a semi-circle with a nice fish eye effect. Android.
源代码 : https://github.com/dkmeteor/CircleList
角度/缩放比 可调
angle调至 180度 为半圆形
-------------------
主要效果为Canvas和Matrix实现的效果,具体看源码就行了。
Java代码
这个地方单独解释一下,反射修改了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部分
不知有没有更好的实现方式,反射修改私有成员变量总是不太好的.....
源代码 : 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部分
不知有没有更好的实现方式,反射修改私有成员变量总是不太好的.....
0 0
- 圆弧形ListView(CircleList)
- 圆弧形ListView(CircleList)
- Android圆弧形ListView的实现
- svg绘制圆弧(一)
- svg绘制圆弧(二)
- 循环链表 CircleList
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android 圆弧形进度条 自定义View
- Android animation 动画背景图自动播放的实现
- 批量修改表名
- win8.1系统下的ftp文件上传和下载
- android 控件 下拉列表(Spinner)
- vi常用命令
- 圆弧形ListView(CircleList)
- C++利用STL的stack将十进制转化为八进制
- 苹果零售店:全球最赚钱的零售空间
- poj 1837 Balance (01背包)
- supervisor的quick tutorial
- SQL SERVER 2008安装的时候提示“该实例名称已在使用”解决办法。
- linux 数据同步 rsync 原理讲解及配置说明
- android 控件 自动提示(AutoCompleteTextView)
- Maven最佳实践:Maven仓库