5

我尝试使用时有很奇怪的现象StateListDrawable

我有一个扩展视图,ImageViewStateListDrawable在其构造函数中使用。我有 2 个代码片段来展示我的问题。第一个:

public class MyView extends ImageView{  
Resources r = getResources();
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale);                    
filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1));                                     
setImageDrawable(filteredDrawable); 
}

第二个:

public class MyView extends ImageView{
Resources r = getResources();
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale);

filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1));

StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},  filteredDrawable);
states.addState(new int[] {android.R.attr.state_focused}, filteredDrawable);
states.addState(new int[] {}, r.getDrawable(R.drawable.smallsale));

//Notice I do not use 'states' at all...
setImageDrawable(filteredDrawable); 

}

(我知道这段代码没有多大意义——我想简化问题以使问题更清楚)。问题是在第一个sinppet 上一切正常——我在drawable 上设置了一个滤色器并显示出来。但是在第二个片段中,StateListDrawable实例以某种方式对过滤器产生影响,并且正在显示原始可绘制对象,即使我从未ImageView通过调用将其连接到setImageDrawable(states).

有人可以向我解释发生了什么吗?我的目标是StateListDrawable为不同的状态使用相同的可绘制对象,如下所示:

StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},  filteredDrawable);
states.addState(new int[] {android.R.attr.state_focused}, filteredDrawable);
states.addState(new int[] {}, r.getDrawable(R.drawable.smallsale));
setImageDrawable(states);

(我需要通过代码来完成,因为我的drawable应该从网络动态加载,而不是作为资源)

4

1 回答 1

3

好的。我找到了这篇文章

事实证明,StateListDrawables 由于某种原因,过滤器松动了……我采用了 SnoK 的解决方案,它对我很有用。

我不知道为什么谷歌不认为它应该在文档上注明作为副作用......

于 2012-11-19T22:21:12.053 回答