我试图做一个通用的框架功能,使任何Drawable在按下/集中/选中/等时都突出显示。
我的函数接受一个Drawable并返回一个StateListDrawable,其中默认状态是Drawable本身,并且的状态android.R.attr.state_pressed
是相同的drawable,只是使用过滤器setColorFilter
。
我的问题是我无法克隆drawable并使用应用的过滤器为其创建单独的实例。这是我要实现的目标:
StateListDrawable makeHighlightable(Drawable drawable)
{
StateListDrawable res = new StateListDrawable();
Drawable clone = drawable.clone(); // how do I do this??
clone.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
res.addState(new int[] {android.R.attr.state_pressed}, clone);
res.addState(new int[] { }, drawable);
return res;
}
如果我不克隆,则过滤器显然适用于两种状态。我尝试一起玩,mutate()
但没有帮助。
有任何想法吗?
更新:
接受的答案确实克隆了一个可绘制对象。但这并没有帮助我,因为我的常规功能在另一个问题上失败了。似乎将可绘制对象添加到StateList时,它会丢失所有过滤器。
ImageView.setImageDrawable
,由于已接受答案,我得以解决。