【问题标题】:Highlight a button when it pressed without using two drawable?按下按钮时突出显示按钮而不使用两个drawable?
【发布时间】:2012-08-01 14:00:09
【问题描述】:

在我使用两个可绘制的按钮状态时使用另一个作为默认值。所以我只是为了简单的效果而制作了一个新的图像!所以现在我问...

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

【问题讨论】:

    标签: android button drawable


    【解决方案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;
            }
        });
    

    【讨论】:

    • 那些为 colorFilter 不工作而苦苦挣扎的人。请使用 invalidate(),它就像一个魅力。
    【解决方案2】:

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

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

    稍后清除过滤器:

    button.getBackground().clearColorFilter();
    

    【讨论】:

    • 过滤器的想法很好,但它的点击效果不好,因为按钮可以按下但不能点击......我可以听一下按下动作吗?
    • 我相信你可以,我以前没有这样做过,所以我没有第一手的经验可以分享。
    【解决方案3】:

    我找到了最好的方法!

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

    瞧瞧!

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • setOnKeyListener 例如?并听 KeyEvent.ACTION_DOWN 和 KeyEvent.ACTION_UP ?你能说得具体点吗?
      • @M'hamed 可能是 setOnTouchListener,但我不确定。
      猜你喜欢
      • 2018-07-30
      • 2011-07-04
      • 2020-08-22
      • 1970-01-01
      • 2013-01-14
      • 2013-01-19
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多