相关疑难解决方法(0)

Android:克隆一个drawable,以便使用过滤器创建一个StateListDrawable

我正在尝试创建一个通用框架函数,使得任何Drawable在按下/聚焦/选择/等时都会突出显示.

我的函数接受一个Drawable并返回一个StateListDrawable,其中默认状态是Drawable本身,而状态for 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;
}
Run Code Online (Sandbox Code Playgroud)

如果我没有克隆,那么过滤器显然适用于这两种状态.我试过玩,mutate()但它没有帮助..

有任何想法吗?

更新:

接受的答案确实克隆了一个可绘制的.这对我没有帮助,因为我的一般功能在一个不同的问题上失败了.看起来当你向StateList添加一个drawable时,它会丢失所有的过滤器.

android drawable android-widget

87
推荐指数
4
解决办法
3万
查看次数

标签 统计

android ×1

android-widget ×1

drawable ×1