我有一个扩展按钮视图的类,我用它来创建自定义形状的按钮,如十六进制按钮,只响应实际按钮区域的点击而不是视图的默认矩形形状 . 然而,那部分是有效的,我也希望能够改变按钮的颜色而不为每种颜色创建不同的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)
这张照片解释了问题,左边的那个是它开始时的样子,而右边的那个是应该的样子 .
1 回答
我找到了答案 . 我需要在应用滤色器之前改变drawable .