不使用两个可绘制对象,在按钮按下时突出显示按钮?

4

以前我使用两个drawable,一个用于按钮按下状态,另一个作为默认状态。所以我为了简单的效果而制作了一个全新的图像!现在我想知道...

当按钮被按下时,是否可以对按钮drawable应用(颜色滤镜或任何效果)?

4个回答

3

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

那些苦恼于colorFilter无法正常工作的人,请使用invalidate(),它会像魔法一样奏效。 - Adarsh Srivastava

2
如果您的按钮为标准灰色背景,则可以在onClick方法中为按钮应用滤镜以更改颜色...
import android.graphics.PorterDuff;
button.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);  //Green

清除筛选器的方法如下:
button.getBackground().clearColorFilter();

过滤器的想法很好,但是它在点击时的实现不好,因为按钮可以被按下但不能被点击...我能监听按下动作吗? - M'hamed
我相信你能做到,但我之前没有这样做过,所以无法分享任何第一手的经验。 - Barak

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

然后就完成了!


1

您可以尝试在其中一个setOn*Listener方法中更改按钮的样式


setOnKeyListener是一个例子吗?监听KeyEvent.ACTION_DOWN和KeyEvent.ACTION_UP事件?你能更具体一些吗? - M'hamed
@M'hamed 可能是 setOnTouchListener,但我不确定。 - Hans Hohenfeld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接