最佳答案
我试图使一个通用的框架函数,使任何可绘制成为突出显示时,按[聚焦][选择][等]。
我的函数接受一个 Drawable 并返回一个 StateListDrawable,其中默认状态是 Drawable 本身,而 android.R.attr.state_pressed
的状态是相同的 Drawable,只是使用了一个使用 setColorFilter
的过滤器。
我的问题是,我不能克隆这个可绘制的图形,并使用应用的过滤器创建一个单独的实例。以下是我试图实现的目标:
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;
}
If I don't clone then the filter is obviously applied to both states. I tried playing with mutate()
but it doesn't help..
有什么想法吗?
更新:
这个被接受的答案确实克隆了一个可画的东西。但是它并没有帮助我,因为我的一般功能在另一个问题上失败了。似乎当您向 StateList 添加可绘制内容时,它会丢失所有的过滤器。