之前我使用兩個可繪製的按鈕狀態時按下,另一個作爲默認值。所以我正在爲了簡單的效果製作一個洞新的圖像!所以,現在我問...在不使用兩個drawable的情況下按下按鈕時突出顯示一個按鈕?
是否可以應用(顏色過濾器或任何效果)的按鈕可按鈕時按下按鈕?
之前我使用兩個可繪製的按鈕狀態時按下,另一個作爲默認值。所以我正在爲了簡單的效果製作一個洞新的圖像!所以,現在我問...在不使用兩個drawable的情況下按下按鈕時突出顯示一個按鈕?
是否可以應用(顏色過濾器或任何效果)的按鈕可按鈕時按下按鈕?
我發現做到這一點的最好辦法!
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!
你可以試着改變按鈕的風格在西頓·監聽方法之一
如果您的按鈕是標準的灰色背景,你可以在onClick
方法應用過濾器的按鈕來改變顏色.. 。
import android.graphics.PorterDuff;
button.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY); //Green
以後要清除過濾器:
button.getBackground().clearColorFilter();
過濾器的想法很好,但它在點擊上的實用性並不好,因爲按鈕可以被按下但沒有被點擊......我可以聽新聞活動嗎? – 2012-08-01 23:17:54
我相信你可以,我以前沒有這樣做過,所以我沒有第一手的經驗來分享它。 – Barak 2012-08-01 23:45:54
或者你也可以,而不是使用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;
}
});
setOnKeyListener用於爲例?並監聽KeyEvent.ACTION_DOWN和KeyEvent.ACTION_UP?你可以說得更詳細點嗎 ? – 2012-08-01 14:36:49
@ M'hamed也許是setOnTouchListener,但我不確定。 – 2012-08-01 16:09:08