我有很多按钮,按下时应更改背景颜色,释放时应恢复原始颜色(透明)。
目标是通过创建尽可能少的文件并避免手动处理触摸事件来实现此目的。
简单地使用StateListDrawable
并不是一个好方法,因为它将图像替换为另一个图像,而不是仅仅为图像添加背景。在这种情况下,每个按钮应该有两个图像:一个用于向上,一个用于按钮的向下状态。目前我只是为了up状态,并希望保持这样状态。
另一种方法是使用Layer list
,然后对于每个按钮,应该有一个单独的xml用于向下状态,它将组合背景颜色和“前景”图像。
我还缺少另一种方法,一些通用的方法吗?
答案 0 :(得分:0)
Android按钮支持custom background with states,无需代码。
该示例显示了使用图像文件,但您也可以定义形状。
答案 1 :(得分:0)
您可以使用ColorFilter
。像这样:
public class MyButton extends Button{
int releasedColor;
int pressedColor;
public MyButton(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP){
getBackground().setColorFilter(releasedColor, PorterDuff.Mode.SRC_IN);
}
else if (event.getAction() == MotionEvent.ACTION_DOWN){
getBackground().setColorFilter(pressedColor, PorterDuff.Mode.SRC_IN);
}
return super.onTouchEvent(event);
}
}
您可以更改mode
参数,以便为您的案例获得最佳结果。
答案 2 :(得分:0)
...
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
v.setBackgroundColor(Color.WHITE);
break;
...