我尝试使用时有很奇怪的现象StateListDrawable
:
我有一个扩展视图,ImageView
我StateListDrawable
在其构造函数中使用。我有 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应该从网络动态加载,而不是作为资源)