【发布时间】:2012-08-01 14:00:09
【问题描述】:
在我使用两个可绘制的按钮状态时使用另一个作为默认值。所以我只是为了简单的效果而制作了一个新的图像!所以现在我问...
当按下该按钮时,是否可以在可绘制的按钮上应用(滤色器或任何效果)?
【问题讨论】:
在我使用两个可绘制的按钮状态时使用另一个作为默认值。所以我只是为了简单的效果而制作了一个新的图像!所以现在我问...
当按下该按钮时,是否可以在可绘制的按钮上应用(滤色器或任何效果)?
【问题讨论】:
或者您也可以使用 setOnTouchListener 而不是使用 setOnClickListner 来仅使用一张图像来获得所需的效果
((Button)findViewById(R.id.testBth)).setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
Button view = (Button) v;
view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP:
// Your action here on button click
case MotionEvent.ACTION_CANCEL: {
Button view = (Button) v;
view.getBackground().clearColorFilter();
view.invalidate();
break;
}
}
return true;
}
});
【讨论】:
如果您的按钮是标准的灰色背景,您可以在onClick 方法中为按钮应用过滤器以更改颜色...
import android.graphics.PorterDuff;
button.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY); //Green
稍后清除过滤器:
button.getBackground().clearColorFilter();
【讨论】:
我找到了最好的方法!
Drawable drawableNotPressed = button.getBackground();
Drawable drawable = drawableNotPressed.getCurrent();
//use a filter
drawable.setColorFilter(0xF00, Mode.MULTIPLY);
StateListDrawable listDrawable = new StateListDrawable();
listDrawable.addState(new int[] { android.R.attr.state_pressed }, drawable);
listDrawable.addState(new int[] { android.R.attr.defaultValue }, drawableNotPressed );
button.setBackgroundDrawable(listDrawable);
瞧瞧!
【讨论】:
您可以尝试在 setOn*Listener 方法之一中更改按钮的样式
【讨论】: