ikb*_*bal 3 android android-listview android-view
我正在使用一个使用ViewHolder模式的listview并获得缓存机制的优势.这是一个代码片段,我尝试设置我的列表项目的背景之一
if(drawable!=null)
{
if(this.backgroundBurnColor!=null && this.backgroundBurnColor.getValue()!=0)
{
Log.d("burncolor", this.backgroundBurnColor.getValue()+"");
drawable.setColorFilter(this.backgroundBurnColor.getValue(), Mode.MULTIPLY);
}else if(this.burnColorKey!=null)
{
Log.d("burncolor", this.Owner.getOwner().getColors().get(this.burnColorKey).getValue()+"");
drawable.setColorFilter(this.Owner.getOwner().getColors().get(this.burnColorKey).getValue(), Mode.MULTIPLY);
}else{
drawable.setColorFilter(null);
}
v.setBackgroundDrawable(drawable);
}
Run Code Online (Sandbox Code Playgroud)
在此代码中,drawable适用于相同的项目类型,但即使我更改可绘制图像时相同的项目类型,它也会根据需要更改.但是改变drawable的滤色器会改变屏幕上出现的列表部分中的每个drawables过滤器.例如,当我向下滚动列表并且屏幕上出现不同的滤色器时,所有可绘制的滤色器都转向相同的滤镜,我需要为每一行获得单独的滤色器.有帮助吗?谢谢
ikb*_*bal 17
对于那些对这个答案感到疑惑的人来说,Romain Guy有一篇关于android中可绘制突变的博客文章:http: //www.curious-creature.org/2009/05/02/drawable-mutations/
当从资源引用drawable时,只初始化了一个Drawable实例,因此所有引用都引用同一个对象.为此,有一种 mutate()绘图方法
而不是写作
drawable.setColorFilter(null);
Run Code Online (Sandbox Code Playgroud)
写作
drawable.mutate().setColorFilter(null);
Run Code Online (Sandbox Code Playgroud)
将解决问题
| 归档时间: |
|
| 查看次数: |
1640 次 |
| 最近记录: |