在没有使用两个可绘制的情况下按下时突出显示一个按钮?

时间:2012-08-01 14:00:09

标签: android button drawable

在我按下按钮状态时使用两个可绘制的按钮并且在默认情况下使用另一个可绘制的按钮之前

所以我只是为了简单的效果而制作一个洞新图像!所以现在我要问......

是否可以在按下该按钮时在按钮上应用(滤色器或任何效果)?

4 个答案:

答案 0 :(得分:2)

如果您的按钮是标准灰色背景,您可以在按钮的onClick方法中应用滤镜来更改颜色......

import android.graphics.PorterDuff;
button.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);  //Green

稍后清除过滤器:

button.getBackground().clearColorFilter();

答案 1 :(得分:2)

我找到了最好的方法!

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);

et Voila!

答案 2 :(得分:1)

您可以尝试在其中一个setOn * Listener方法

中更改按钮的样式

答案 3 :(得分:1)

或者您也可以使用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;
        }
    });