java setColorFilter适用于所有按钮
我有一个扩展按钮视图的类,我使用它来创建自定义形状的按钮,比如hex按钮,并且只响应实际按钮区域上的点击,而不是视图的默认矩形形状。但是,这部分是有效的,我还希望能够更改按钮的颜色,而无需为每种颜色创建不同的可绘制内容,因此我创建了带有灰度着色的白色按钮图像,并使用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)的链接
这张图片解释了这个问题,左边的是它开始时的样子,而右边的是它应该是什么样子
# 1 楼答案
我找到了答案。在使用滤色器之前,我需要对绘图进行变异