滚动时列表颜色变为黑色

时间:2011-12-16 07:18:36

标签: android

我有一个列表活动,当我点击一个选项卡时填充,问题是列表颜色在滚动时变黑,即使我没有设置任何属性发生这样的..任何建议,以避免这个问题? 谢谢,

4 个答案:

答案 0 :(得分:21)

将其添加到xml文件中的listView

android:cacheColorHint="#00000000"

或Java代码:

getListView().setCacheColorHint(0);

答案 1 :(得分:7)

我建议你阅读这篇文章:ListView Backgrounds: An Optimization,在定制LitsView外观之前必须阅读这篇文章。

取自上述文件:

如前所述,默认情况下,ListView具有透明/半透明背景,因此Android UI工具包中的所有默认小部件都是如此。这意味着当ListView重绘其子项时,它必须将子项与窗口的背景混合。再一次,这需要从内存中进行昂贵的回读,这在滚动过程中尤为痛苦,或者每秒进行数十次绘制时会出现这种情况。

为了提高滚动操作期间的绘图性能,Android框架重用了缓存颜色提示。设置此提示后,框架会在填充了提示值的位图中复制列表的每个子项(假设另一个优化,称为滚动缓存,未关闭)。然后ListView直接在屏幕上显示这些位图,因为已知这些位图是不透明的,所以不需要混合。此外,由于默认缓存颜色提示为#191919,因此在滚动期间每个项目背后会出现深色背景。

要解决此问题,您所要做的就是禁用缓存颜色提示优化,如果使用非纯色背景,或将提示设置为适当的纯色值。您可以使用android:cacheColorHint属性从代码(请参阅 setCacheColorHint(int) )或最好从XML执行此操作。要停用优化,只需使用透明色 #00000000 。以下屏幕截图显示了在XML布局文件中设置 android:cacheColorHint="#00000000" 的列表

答案 2 :(得分:0)

您是否在使用

的活动或应用中设置了主题
<item name="android:windowBackground">@null</item>

当你有一个填充父视图的视图(通常是surfaceView)时,这是一个加速2D绘图的技巧。我看到这导致listViews和scrollViews的奇怪背景渲染。

如果您使用null windowbackground hack,您可以尝试为列表视图设置背景颜色,我敢打赌滚动问题会减少。

答案 3 :(得分:0)

我知道很晚才回答这个问题,但对于那些面临这个问题的人来说:

以上技术可能有效,但实际应该做的是添加

android:scrollingCache="false"
列表布局中的

。喜欢这个

     <ListView 
   android:layout_width="30dp"
   android:layout_height="30dp"
   android:id="@+id/myList"
   android:scrollingCache="false"
    />

你可以从这里scrollingCache?

得到这个原因

谢谢