【发布时间】:2011-12-20 05:39:12
【问题描述】:
我正在尝试制作一个通用框架函数,当按下/聚焦/选择/等时,使任何 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 时,它会丢失所有过滤器。
【问题讨论】:
-
您好,您找到解决可绘制对象丢失过滤器的方法了吗?我遇到了同样的问题:(我最终通过克隆位图并逐像素应用过滤器从源图像生成其他图像。是的,这效率低下,但我只处理了一堆小图像。跨度>
-
我无法使用 StateListDrawable 解决它,但如果您没有使用 StateListDrawable 并且仍然丢失过滤器,请确保您的位图是可变的。有很好的相关问题:stackoverflow.com/questions/5499637/…,我还发现 LightingColorFilter 在 PorterDuff 失败的地方工作.. 喜欢这个 android :)
-
这个链接上的一个很好的答案stackoverflow.com/questions/10889415/…
-
ImageView.setImageDrawable触发了类似的副作用,由于接受了答案,我得以解决。 -
我正在尝试做同样的事情,它以某种方式按预期工作,ColorFilter 没有丢失......不同之处在于我确实改变了drawable。
标签: android android-widget drawable