项目需要设计一个类似于QQ展开后的列表样式。
考虑了一下后,写了一个Adapter来定义ListView中的数据。在Adapter中将title也作为listitem的一项存放在list中,getview的时候判断该view是title则生成一个textview返回,否则套用ListItem的格式返回一个layout。
一切很顺利,但是悲剧马上来了。UI的设计为当继续向上滑动的时候title需要一直漂浮在顶端知道下一个title触顶。
起初认为如果是一个RelativeLayout中嵌套一个ListView和一个TextView应该很好实现。后来想将其做到一起,直接重写一个ListView在OnDraw里面画出这个title。
个人认为思路没啥问题,开始代码。先写了个实验的代码,在扩展的listview的ondraw中直接写了个text。跑了一下,没出来。
然后就开始了暗无天日的一下午的调试。后来想起头说的,遇到bug休息一下,回来再看。休息5分钟后,回头分析了一下,忽然想到ListView他nnd应该是个ViewGroup。
坑爹啊,被前面的子View给覆盖了。错误够低级。
修改了子view的透明度,果然看到了那几个该死的字。然后按照UI 设计重新画漂浮的title。
问题又来了,根本上来说ListView还是先执行本身的OnDraw然后才会执行子View的onDraw。
然后想到的就是将子View都设透明度,估计问题就可以解决了。但是效果估计和UI设计有些出入。
实在不行就还是用RelativeLayout解决问题。
总结一下。
多级的ListView样式可以通过定制Adapter来模拟实现,还有一些细节,比如屏蔽点击等。
另外定制自己的Listview需要考虑到onDraw的描绘顺序。
另外一个小细节是,cacheHintColor可以设置为背景色一致的,否则默认当滑动listView的时候背景是黑色的,影响UI。