আমি পূর্ববর্তী উত্তরগুলিতে রঙিন ফিল্টার পরামর্শ পছন্দ করি @ সংযুক্তি নির্দেশিকা এবং @ টমাসজ থেকে; তবে, আমি দেখতে পেয়েছি যে এখন পর্যন্ত সরবরাহ করা কোডটি আমার প্রত্যাশার মতো সহজে প্রয়োগ করা হয়নি।
প্রথমত, কোথায় রঙিন ফিল্টার প্রয়োগ এবং পরিষ্কার করতে হবে তা উল্লেখ করা হয়নি । এটি করার জন্য আরও ভাল ভাল জায়গা রয়েছে এটি সম্ভব, তবে আমার জন্য যে বিষয়টি মনে পড়েছিল তা হ'ল একটি অনটচলিস্টাইনার ।
মূল প্রশ্নটি আমার পড়া থেকে, আদর্শ সমাধানটি এমন কোনও হবে যা কোনও চিত্র জড়িত না। @ এমএমবি থেকে কাস্টম_বাটন.এক্সএমএল ব্যবহার করে গৃহীত উত্তর হ'ল এটি যদি আপনার লক্ষ্য হয় তবে রঙ ফিল্টারগুলির চেয়ে ভাল ফিট। আমার ক্ষেত্রে, আমি একটি ইউআই ডিজাইনারের পিএনজি চিত্র দিয়ে শুরু করছি যা বোতামটির মতো দেখতে হবে। যদি আমি এই চিত্রটিতে বোতামের পটভূমি সেট করি তবে ডিফল্ট হাইলাইট প্রতিক্রিয়াটি পুরোপুরি হারিয়ে যায়। এই কোডটি সেই আচরণকে একটি প্রোগ্রাম্যাটিক গাening় প্রভাব দিয়ে প্রতিস্থাপন করে।
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();
}
});
আমি একাধিক বোতামে প্রয়োগের জন্য এটি একটি পৃথক শ্রেণি হিসাবে উত্তোলন করেছি - কেবল ধারণা পেতে বেনামি অভ্যন্তর শ্রেণি হিসাবে দেখানো হয়েছে।