2013-01-14 158 views
0

我有一个九按钮图像的按钮。我不想为“按下”状态提供另一个图像(这是StateListDrawable要求的)。我只是想让它在被按下时变得更“黑暗”(就像iOS按钮一样)。我怎样才能做到这一点?使用单个图像按下时更改按钮的颜色

回答

1

使用这样的事情:

public class MyStateDrawable extends LayerDrawable { 

    public MyStateDrawable(Drawable[] layers) { 
     super(layers); 
    } 

    @Override 
    protected boolean onStateChange(int[] states) { 
     for (int state : states) { 
      if (state == R.attr.state_activated || state == android.R.attr.state_pressed) { 
       super.setColorFilter(0x7f000000, Mode.SRC_ATOP); 
       return true; 
      } else if(state == -android.R.attr.state_activated || state == -android.R.attr.state_pressed){ 
       super.setColorFilter(0x00000000, Mode.SRC_ATOP); 
       return true; 
      }else { 
       super.setColorFilter(null); 
      } 
     } 
     return super.onStateChange(states); 
    } 

    @Override 
    public boolean isStateful() { 
     return true; 
    } 
} 

然后

StateDrawable state = new MyStateDrawable(new Drawable[]{mDefaultDrawable}); 
view.setImageDrawable(state); 

希望这将帮助你:)

+0

谢谢您的回答。假设'view'是'ImageView'的一个实例,对吧?我不想使用'ImageView'而不是'Button',因为我需要'setText'方法... – Nick

+0

@Nick是否尝试过使用setBackgroundDrawable而不是setImageDrawable? – AMerle

+0

好吧,唯一不清楚的是:我该如何创建'mDefaultDrawable'?再次,我的按钮的图像是九个补丁,所以我需要创建一个'NinePatchDrawable',不知何故我猜? – Nick