我正在尝试制作一个通用框架函数,使任何 Drawable 在以下情况下都会突出显示按下/聚焦/选择/等等.
我的函数接受一个 Drawable 并返回一个 StateListDrawable,其中默认状态是 Drawable 本身,并且状态为android.R.attr.state_pressed
是相同的可绘制,只是使用应用了过滤器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()
但这没有帮助..
有任何想法吗?
Update:
接受的答案确实克隆了一个可绘制对象。但这对我没有帮助,因为我的一般功能在另一个问题上失败了。似乎当您将可绘制对象添加到 StateList 时,它会丢失所有过滤器。
请尝试以下操作:
Drawable clone = drawable.getConstantState().newDrawable();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)