我正在尝试制作一个通用框架函数,当按下/聚焦/选择/等时,使任何 Drawable 都高亮显示。
我的函数接受一个 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;
}
如果我不克隆,那么过滤器显然适用于两种状态。我试过玩 mutate()
但它没有帮助..
有什么想法吗?
更新:
接受的答案确实克隆了一个drawable。但它并没有帮助我,因为我的一般功能在另一个问题上失败了。似乎当您将可绘制对象添加到 StateList 时,它会丢失所有过滤器。
最佳答案
尝试以下方法:
Drawable clone = drawable.getConstantState().newDrawable();
关于Android:克隆可绘制对象以使用过滤器制作 StateListDrawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7979440/