ฉันชอบคำแนะนำตัวกรองสีในคำตอบก่อนหน้านี้จาก @conjugatedirection และ @Tomasz; อย่างไรก็ตามฉันพบว่ารหัสที่ให้มาไม่ได้ใช้อย่างง่ายดายอย่างที่คาดไว้
ก่อนอื่นไม่ได้ระบุตำแหน่งที่จะใช้และล้างตัวกรองสี เป็นไปได้ว่ามีสถานที่ที่ดีอื่น ๆ ให้ทำเช่นนี้ แต่สิ่งที่ฉันคิดว่าเป็นOnTouchListener OnTouchListener
จากการอ่านคำถามต้นฉบับโซลูชันที่เหมาะสมที่สุดจะเป็นสิ่งที่ไม่เกี่ยวข้องกับภาพใด ๆ คำตอบที่ได้รับการยอมรับโดยใช้ custom_button.xml จาก @emmby น่าจะเหมาะสมกว่าฟิลเตอร์สีหากเป็นเป้าหมายของคุณ ในกรณีของฉันฉันเริ่มต้นด้วยภาพ png จากผู้ออกแบบ UI ว่าปุ่มควรมีลักษณะอย่างไร หากฉันตั้งค่าพื้นหลังปุ่มเป็นภาพนี้ความคิดเห็นไฮไลต์เริ่มต้นจะหายไปอย่างสมบูรณ์ รหัสนี้แทนพฤติกรรมที่มีลักษณะพิเศษมืดโปรแกรมโดย
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();
}
});
ฉันแยกสิ่งนี้เป็นคลาสแยกต่างหากสำหรับแอปพลิเคชันไปยังปุ่มหลายปุ่ม - แสดงเป็นคลาสภายในที่ไม่ระบุชื่อเพื่อรับแนวคิด