2013-01-14 202 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