Saya suka saran filter warna dalam jawaban sebelumnya dari @conjugatedirection dan @Tomasz; Namun, saya menemukan bahwa kode yang diberikan sejauh ini tidak semudah yang saya harapkan.
Pertama, tidak disebutkan di mana menerapkan dan menghapus filter warna. Mungkin ada tempat-tempat bagus lain untuk melakukan ini, tetapi yang terlintas di benak saya adalah OnTouchListener .
Dari bacaan saya tentang pertanyaan awal, solusi ideal adalah solusi yang tidak melibatkan gambar apa pun. Jawaban yang diterima menggunakan custom_button.xml dari @emmby mungkin lebih cocok daripada filter warna jika itu adalah tujuan Anda. Dalam kasus saya, saya mulai dengan gambar png dari desainer UI tentang seperti apa bentuk tombol itu. Jika saya mengatur latar belakang tombol untuk gambar ini, umpan balik sorotan default hilang sepenuhnya. Kode ini menggantikan perilaku itu dengan efek penggelapan program.
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 0x6D6D6D sets how much to darken - tweak as desired
setColorFilter(v, 0x6D6D6D);
break;
// remove the filter when moving off the button
// the same way a selector implementation would
case MotionEvent.ACTION_MOVE:
Rect r = new Rect();
v.getLocalVisibleRect(r);
if (!r.contains((int) event.getX(), (int) event.getY())) {
setColorFilter(v, null);
}
break;
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
setColorFilter(v, null);
break;
}
return false;
}
private void setColorFilter(View v, Integer filter) {
if (filter == null) v.getBackground().clearColorFilter();
else {
// To lighten instead of darken, try this:
// LightingColorFilter lighten = new LightingColorFilter(0xFFFFFF, filter);
LightingColorFilter darken = new LightingColorFilter(filter, 0x000000);
v.getBackground().setColorFilter(darken);
}
// required on Android 2.3.7 for filter change to take effect (but not on 4.0.4)
v.getBackground().invalidateSelf();
}
});
Saya mengekstraksi ini sebagai kelas terpisah untuk aplikasi ke beberapa tombol - ditampilkan sebagai kelas dalam anonim hanya untuk mendapatkan ide.