首页 文章

setColorFilter适用于所有按钮

提问于
浏览
1

我有一个扩展按钮视图的类,我用它来创建自定义形状的按钮,如十六进制按钮,只响应实际按钮区域的点击而不是视图的默认矩形形状 . 然而,那部分是有效的,我也希望能够改变按钮的颜色而不为每种颜色创建不同的drawable,所以我创建了带有灰度阴影的白色按钮图像,并使用setColorFilter设置我读取的颜色从xml开始,除了当活动开始或重新启动时,所有按钮都获得最后一个按钮的颜色(最后创建或单击),它的效果很好 . 手动单击按钮可以设置正确的颜色,但在更改活动并返回时,所有按钮都会获得最后按下的按钮的颜色 .

这是我初始化颜色的地方:

@Override
protected void onFinishInflate() {
    super.onFinishInflate();
    // Set the button background and color
    updateButton(normalButton);
}

private void updateButton(Drawable background) {
    if (background == null) return;
    //Set button background
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        this.setBackground(background);
    } else {
        //noinspection deprecation
        this.setBackgroundDrawable(background);
    }
    this.getBackground().setColorFilter(buttonColor, PorterDuff.Mode.MULTIPLY);
    //this.setBackgroundColor(buttonColor);
}

函数 updateButton() 也在 onTouch() 方法中用于在按下状态和正常状态之间切换可绘制 . 当按下任何按钮时,它可以正常工作并设置正确的颜色 .

如果我使用 this.setBackgroundColor(buttonColor); 着色工作找到(但它覆盖图像),但是, setColorFilter 不能正常工作 .

有人可以帮我吗?

这是整个代码的链接(link on github

enter image description here

这张照片解释了问题,左边的那个是它开始时的样子,而右边的那个是应该的样子 .

1 回答

  • 0

    我找到了答案 . 我需要在应用滤色器之前改变drawable .

    myDrawable = myDrawable.mutate();
    myDrawable.setColorFilter(buttonColor, PorterDuff.Mode.MULTIPLY);
    

相关问题