ExpandableListView滑动时会变黑
来源:互联网 发布:域名提供商 编辑:程序博客网 时间:2024/06/11 16:54
问题
有一个简单的ExpandableListView用于显示某一天下面的事件列表。为了符合整体的风格,把窗口的背景设成了白色,把ExpandableListView的背景也设置成了白色!一切都很好,但突然发现,当滑动的时候,ExpandableListView会变黑!甚是奇怪。刚开始以为是Focus的问题,调整了不管用。后来,调整了每个GroupItem和ChildItem的背景,把它们的背景都设成白色的,问题是解决了,但想不明白原因是什么。Google了一下才发现原来这是Android里的一个坑,并且有更好的解法。下图中右边是正常情况下的截屏,左边是滑动时的情况.
ListView(其实查看了源码,很多东西都是AbsListView,因为ListView的滑动,手势,事件等都是由AbsListView来做的)本身的背景是透明的,你看到的ListView之所以是黑色的(Android 2.3默认情况下)其实并不是ListView或者其Item的背景,而是窗体的背景,ListView是透明的。因为背景是透明的,所以在渲染时,就必须做混合,把子Item的前台着色和背景与窗体背景进行混合(blending).这样做效果很好,但是效率稍差,所以当滑动时,ListView中的Item都是一闪而过,很快会滑过一大把的Item,所以如果对每个显示出来的Item都做这样的混合的话,性能会有损失.所以为了优化就使用了cache color hint这个东西,它仅是一个RGB着色值,ListView会把它当作滑动时的背景,因为它并不是透明的,所以在滑动的时候就不会做Blending,进而提升的效率.因为默认情况下窗体的背景是#191919,而AbsListView默认的cache color hint也是#191919,所以你看不出来!
而当你设置了窗体背景和ListView的背景时就不一样了,窗体背景着色变了,而默认的cache color hint还是#191919所以,你滑动的时候就会看到ListView是黑色的.
因为ExpandableListView是ListView的子类,所以它也有这个问题.
原文 前半段说到了在边缘时的渐裉色也用到了cache color hint但与这个问题无关.
解法
最简单的解法,就是把ListView的每个Item的背景色也都调成跟窗体背景色一致.这样Item会盖住ListView的cache color hint自然会解决问题.但如果窗体的背景是一个整体的图片的话这样做就会不妥,实现起来也有难度.
其次的解法就是作者建议的把cache color hint设置成透明色#00000000,这样实际上会Disable掉ListView滑动时的优化,因为你把它变成了无色透明的,它必须去做Blending.自然这会造成损失,不过对于现在的Android系统,这并不算是问题(原文是在2009年1月发布的,那个时候的Android性能还很差,各方面也都很差).这非常适用于窗体的背景一个图片时.
- 顶
- 4
- 踩
0 0
- ExpandableListView滑动时会变黑
- Android实战技巧: ExpandableListView滑动时会变黑
- ListView滑动时变黑
- Android ListView滑动变黑
- ListView 滑动变黑
- 解决listview滑动变黑。。
- 解决ListView或ExpandableListView滚动时变黑
- Android ListView 解决滑动变黑
- listview滑动变黑的问题
- android listview滑动底色变黑
- ListView滑动变黑的问题
- ExpandablelistView+swipeLayout 滑动删除
- 解决ListView和ExpandableListView滚动时背景变黑
- Android下ListView上下滑动背景变黑
- Android下ListView上下滑动背景变黑
- android中ListView滑动变黑的情况
- android中listview滑动变黑的解决办法
- Android下ListView上下滑动背景变黑
- Android开发中遇到的问题集合(二)--正则表达式及其用法
- CBC和Oneshot的区别
- JVM原理和优化
- 2016年度 JavaScript 展望
- memached分布式内存缓存服务器
- ExpandableListView滑动时会变黑
- iOS开发 ☞ 旧版工具下载
- gcd理解学习
- Thawte
- CocoaPods 的安装流程
- Sun JVM 年轻代和老年代垃圾回收都需要暂停JVM
- 回溯法——字符串的全排列
- tomcat8 配置过程 JRE_HOME错误等
- 数据结构_线性表_链式存储_双向循环链表的基本操作