2012-08-01 59 views

回答

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

et Voila!

1

你可以試着改變按鈕的風格在西頓·監聽方法之一

+0

setOnKeyListener用於爲例?並監聽KeyEvent.ACTION_DOWN和KeyEvent.ACTION_UP?你可以說得更詳細點嗎 ? – 2012-08-01 14:36:49

+0

@ M'hamed也許是setOnTouchListener,但我不確定。 – 2012-08-01 16:09:08

2

如果您的按鈕是標準的灰色背景,你可以在onClick方法應用過濾器的按鈕來改變顏色.. 。

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

以後要清除過濾器:

button.getBackground().clearColorFilter(); 
+0

過濾器的想法很好,但它在點擊上的實用性並不好,因爲按鈕可以被按下但沒有被點擊......我可以聽新聞活動嗎? – 2012-08-01 23:17:54

+0

我相信你可以,我以前沒有這樣做過,所以我沒有第一手的經驗來分享它。 – Barak 2012-08-01 23:45:54

1

或者你也可以,而不是使用setOnClickListner使用setOnTouchListener獲得預期的效果只用一個形象

((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; 
     } 
    }); 
相關問題