2014-09-01 74 views
0

我有一個圖標的ImageButton:如何以編程方式更改圖像按鈕圖標的顏色?

 <ImageButton 
      android:src="@drawable/ic_action_favorite" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:id="@+id/discussionActionBtn"/> 

目前,該圖標的默認顏色是灰色的。 有沒有一些方法來編程使圖標以另一種顏色顯示?

我能想到的迄今最好的是創建另一個資產與所需的顏色,但我不知道是否有另一種方式(可能使用過濾器?)

+0

有posibilyties,但我完全不會推薦它,因爲這將不得不做,因爲這將不得不做 - 每次用戶點擊按鈕,即使它不是mutch工作要做,這將總結大量浪費的處理時間。在手機上,您必須節省資源,並且創建幾KB的小PNG並保存,比每次單擊某個按鈕時創建彩色圖像的效率高得多。 – Gumbo 2014-09-01 20:50:51

+0

你可以看看這個:http://stackoverflow.com/questions/11376516/change-drawable-color-programmatically。但這種方法的問題在於,當您將ColorFilter設置爲Drawable時,所有更改將在使用drawable的所有視圖中保留。 – chjarder 2014-09-02 06:35:57

+0

您可以使用透明圖標,只需更改按鈕的背景顏色即可。這將顯示顏色變化,但更容易和更快。 – Gravitoid 2014-09-02 22:07:48

回答

0
<Button 
android:background="@android:color/white" 
android:textColor="@android:color/black" 
/> 

或者通過編碼 btnSample。 setBackgroundColor(Color.WHITE); btnSample.setTextColor(Color.BLACK);

0

如果你想以編程的方式做,那麼你可以使用這樣一個小的類,它給你的ImageButton一個很好的邊界。

 public class BorderDrawable extends BitmapDrawable { 
     private static final int BORDER_WIDTH = 9; 
     private final int[] GRADIENT_COLORS = {Color.GRAY,Color.BLUE, Color.GREEN, Color.RED}; 
     Paint borderPaint; 

     public BorderDrawable(Resources res, Bitmap bitmap) { 
      super(res, bitmap); 
      this.borderPaint = new Paint(); 
      borderPaint.setStrokeWidth(BORDER_WIDTH); 
      borderPaint.setStyle(Paint.Style.STROKE); 

      // set border gradient 
      Shader shader = new LinearGradient(0, 0, 0, getBounds().bottom, GRADIENT_COLORS, null, Shader.TileMode.CLAMP); 
      borderPaint.setShader(shader); 

      // or the border color 
      // borderPaint.setColor(Color.GREEN); 

     } 

     @Override 
     public void draw(Canvas canvas) { 
      super.draw(canvas); 
      // draw 
      canvas.drawRect(getBounds(), borderPaint); 
     } 
    } 

你可以使用它這樣的東西。

Bitmap bmp = /*your bitmap*/; 
BorderDrawable drawable = new BorderDrawable(getResources(), bmp); 
discussionActionBtn.setImageDrawable(drawable); 

希望我不是主題。我想這可以幫助你。

相關問題